Как следить за изменениями файлов в dotnet watch с помощью Visual Studio ASP.NET Core

Я использую Visual Studio с ASP.NET Core и запускаю веб-сайт, используя только F5 или Ctrl + F5 (без использования командной строки напрямую). Я хотел бы использовать функцию «dotnet watch», чтобы убедиться, что все изменения принимаются на лету, чтобы избежать повторного запуска сервера. Похоже, что в командной строке вы бы использовали для этого команду dotnet watch run, но Visual Studio использует launchSettings.json и делает это за кулисами, если я правильно понимаю.

Как я могу подключить туда "dotnet watch"?


person Ilya Chernomordik    schedule 20.10.2016    source источник
comment
Думаю, у вас неправильное представление о функциональности часов. Когда вы изменяете файл, ваше приложение будет перезапущено, и ему придется снова разогреваться при первом запросе или заполнить его кеш (поскольку кэшированный в памяти контент теряется при перезапуске)   -  person Tseng    schedule 20.10.2016
comment
Я действительно имел в виду отсутствие необходимости перезапускать приложение вручную. Итак, я понимаю, что это не какая-то магия на лету, что было бы неплохо, если бы была аналогична перекомпиляции представлений cshtml, которая не перезапускает все приложение.   -  person Ilya Chernomordik    schedule 20.10.2016


Ответы (8)


Откройте launchSettings.json и добавьте его в profiles.

  "Watch": {
    "executablePath": "C:\\Program Files\\dotnet\\dotnet.exe",
    "commandLineArgs": "watch run",
    "launchBrowser": true,
    "launchUrl": "http://localhost:5000",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  }

Откройте project.json и добавьте его в tools.

"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"

После восстановления мы можем наблюдать из Visual Studio.

введите описание изображения здесь

person Shaun Luttin    schedule 22.10.2016
comment
Спасибо за ответ. В конце концов, это было довольно просто. Сам не догадывался, что вы можете просто использовать dotnet напрямую из командной строки с launchSettings.json :). Хотя кажется, что он выполняет полный перезапуск приложения, чего в значительной степени можно достичь, запустив IIS Express и просто собрав приложение. Если вы сделаете много изменений, я думаю, часы будут перезапускаться при каждом сохранении файла. Так что выбор, вероятно, должен зависеть от того, на какой стадии развития вы находитесь (как часто вы меняете что-то). - person Ilya Chernomordik; 23.10.2016
comment
Похоже, никаких изменений не наблюдается. Что-нибудь еще наворочит, чтобы он смотрел соответствующий каталог? - person Marchy; 30.01.2017
comment
@Marchy Какова ваша структура каталогов? Где ваш launch.json файл? Другими словами, что вы пробовали? Возможно, стоит задать новый вопрос, чтобы уточнить ситуацию, с которой вы столкнулись. - person Shaun Luttin; 30.01.2017
comment
При запуске он не позволяет мне изменять какие-либо файлы из IDE lol. - person Matthew James Davis; 06.04.2017
comment
@MatthewJamesDavis Что именно вы имеете в виду? Мне любопытно. - person Shaun Luttin; 06.04.2017
comment
launchSettings специфичны для Visual Studio. В Visual Studio я внес это изменение и нажал кнопку «Пуск», после чего началась отладка. Visual Studio не позволяет изменять код C # во время отладки. Я могу зайти в VS Code или другой редактор и внести изменения, но Visual Studio зависает. В конечном итоге я настроил свой проект исключительно на VS Code, потому что опыт разработки в Visual Studio был настолько низким. - person Matthew James Davis; 07.04.2017
comment
@MatthewJamesDavis В наши дни я на 100% использую VSCode по разным причинам. Главный из них - частота сбоев полной версии Visual Studio. - person Shaun Luttin; 07.04.2017
comment
привет @ShaunLuttin Я пробовал наблюдать за 2.0.0 с .net core 2.0.3, и он не работает, когда я отлаживаю приложение, он откроет пустую скрытую консоль, и приложение не запустится, вы сталкиваетесь с чем-то подобным - person programtreasures; 03.12.2017
comment
Для ответа 2021 года с VS 2019 и .Net 5 вы можете проверить мой ответ ниже: stackoverflow.com/a/66186596/5780536 - person mikeandtherest; 13.02.2021
comment
вы забыли добавить "commandName": "Watch", в узел наблюдения за настройками запуска ... - person serge; 29.04.2021

Для .Net 5 и 6 см. Последнее обновление!

Если вы хотите использовать ASP.NET 2.x или 3.x, вам нужно немного изменить его.

  • Инструмент просмотра теперь является глобальным инструментом, и вам больше не нужно добавлять его в качестве ссылки.

  • Синтаксис немного отличается

      "Watch": {
        "executablePath": "dotnet.exe",
        "workingDirectory": "$(ProjectDir)",
        "commandLineArgs": "watch run",
        "launchBrowser": true,
        "launchUrl": "http://localhost:5000/",
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
        }
      }
      

ОБНОВЛЕНИЕ: добавлен рабочий каталог и удален конкретный путь. Теперь он более общий.

ОБНОВЛЕНИЕ (2021-05-19): для .Net 5 и 6

A) В VisualStudio 2019

  1. Выберите Инструменты ›⚙ Параметры› Проекты и решения ›ASP .NET Core
  2. Выберите Автоматическая сборка и обновите браузер после сохранения изменений в параметре Автоматическая сборка и обновление.
  3. Нажмите Ctrl + F5 (запуск без отладки) ВАЖНО: работает только при запуске без отладки.

Б) В противном случае добавьте это в свой launchSettings.json

{
  "iisSettings": {
    ...
  },
  "profiles": {
    ... ,

    "Watch": {
      "commandName": "Executable",
      "executablePath": "dotnet.exe",
      "workingDirectory": "$(ProjectDir)",
      "commandLineArgs": "watch run"
    }

  }
}

Автоматически созданный profile с "commandName":"Project" имеет все остальные необходимые свойства: launchBrowser, applicationUrl, environmentVariables, dotnetRunMessages и hotReloadProfile. Здесь следует вносить любые изменения.

Соответствующее сообщение в блоге Хуана Круза Фианта: https://dev.to/juxant/auto-refresh-with-dotnet-watch-for-asp-net-core-projects-20no

person Michael A. Volz aka Flynn    schedule 09.11.2018
comment
Это заблокировало мои файлы C #, во время работы я не могу редактировать файлы, какие-либо подсказки? - person Ayyash; 20.11.2018
comment
@Ayyash Я использую это все время. Без проблем. У меня установлен 2.2 Preview3. Что именно вы имеете в виду под невозможностью редактировать файлы? - person Michael A. Volz aka Flynn; 20.11.2018
comment
Думаю, я работал в режиме отладки, который блокирует файлы, есть еще один вариант запустить без отладки, верно? Я забыл, что прошло много времени с тех пор, как я работал с ним - person Ayyash; 22.11.2018
comment
Возможно, у вас отключено «Редактировать и продолжить»? docs.microsoft.com/en- us / visualstudio / debugger / - person Piedone; 24.11.2018
comment
Это сработало, однако мне пришлось изменить относительный путь проекта, чтобы перейти на 3 каталога вместо 4. Например: "commandLineArgs": "watch --project ..\\..\\..\\YOUR_PROJECT.csproj run" - person burnt1ce; 29.12.2018
comment
Если вы добавите "workingDirectory": "$(ProjectDir)",, вы можете удалить --project ... arg. - person DharmaTurtle; 21.03.2019
comment
Несмотря на "launchBrowser": true,, мой браузер не запускается. Это работает для кого-нибудь еще? - person DharmaTurtle; 21.03.2019
comment
У меня он тоже не запускает браузер. Приходится делать это вручную. - person Michael A. Volz aka Flynn; 21.03.2019
comment
@Ayyash, вам нужно нажать CTRL + F5, чтобы не нажимать Watch или F5 - person mshwf; 01.06.2019

Одно небольшое исправление к ответу @Flynn. Вам нужно добавить

"commandName": "Executable"

аргумент к профилю «Смотреть». Также для определения URL-адресов вы должны определять их не в профиле "Watch", а в профиле с

"commandName": "Program"

аргумент (он присутствует в launchsettings.json по умолчанию, созданном шаблонами проектов Visual Studio, поэтому ваш launchsettings.json, наконец, выглядит так:

"AnyTest.WebClient": {
  "commandName": "Project",
  "launchBrowser": true,
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  },
  "launchUrl": "",
  "applicationUrl": "https://localhost:44353;http://localhost:51895",
  "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}"
},
"Watch": {
  "commandName": "Executable",
  "workingDirectory": "$(ProjectDir)",
  "executablePath": "dotnet.exe",
  "commandLineArgs": "watch run"
}

Я сохранил аргумент launchBrowser в профиле Program, но браузер не запущен. Но если этот аргумент присутствует в профиле Executable, браузер тоже не запускается, и я не нашел способа запустить его автоматически.

person Дмитро Іванов    schedule 09.04.2020
comment
CommandName - это проект программы? - person serge; 29.04.2021
comment
@serge Project - person Meeting Attender; 18.06.2021

"Watch": {
  "commandName": "Project",
  "launchBrowser": true,
  "launchUrl": "http://localhost:5000/",
  "commandLineArgs": "watch run",
  "workingDirectory": "$(ProjectDir)",
  "executablePath": "dotnet.exe",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }
}

Этот будет работать и запускать браузер. Он работает из-за строки "commandName": "Project", что означает, что он будет запускаться с сервером Kestrel.

person userError342947    schedule 08.05.2020
comment
не работает.. - person vip32; 18.02.2021
comment
Это должен быть принятый ответ. VS 2019 v16.10.2. - person Meeting Attender; 18.06.2021

Принятый ответ работает, но ему 4+ лет. Итак, вот как это работает в Visual Studio 2019 (в моем случае v16.8.5).

Внутри раздела profiles launchSettings.json вы добавляете новый профиль, скажем, API Watch, с таким содержанием:

"API Watch": {
  "commandName": "Executable",
  "executablePath": "dotnet",
  "commandLineArgs": "watch run",
  "workingDirectory": "$(ProjectDir)",
  "launchBrowser": true,
  "applicationUrl": "https://localhost:5001;http://localhost:5000",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  },
  "dotnetRunMessages": "true"
}

Затем вы выбираете его в раскрывающемся списке профилей сборки:

введите описание изображения здесь


Теперь, когда вы запускаете его, независимо от, включен ли режим отладки или нет, перекомпоновка и обновление браузера (я использую пользовательский интерфейс Swagger в качестве страницы по умолчанию) происходят автоматически.


Одно замечание об использовании его в режиме отладки заключается в том, что Visual Studio будет отмечать изменения зеленым цветом и сообщать, что они не будут применены до тех пор, пока не произойдет перезапуск. Я могу подтвердить, что это неправда и что изменения действительно отражаются функцией автоматического восстановления dotnet watch run. Просто VS 2019 запутывается и рассматривает вещи со старой (стандартной) точки зрения.

введите описание изображения здесь

person mikeandtherest    schedule 13.02.2021
comment
Технически лучшее решение. Спасибо. - person Paul-Sebastian Manole; 22.04.2021

Откройте launchSettings.json и добавьте его в профили.

 "Watch": {
      "executablePath": "dotnet.exe",
      "commandLineArgs": "watch --project ..\\..\\..\\YourProject.csproj run",
      "launchBrowser": true,
      "launchUrl": "http://localhost:5000/",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
person yas17    schedule 25.04.2020

Всем, кто читает эти действительно старые ответы и задается вопросом, прижился ли он еще, вы должны прочитать это сообщение в блоге от 22 ноября 2020 года.

https://dev.to/juxant/auto-refresh-with-dotnet-watch-for-asp-net-core-projects-20no

В Visual Studio 2019 теперь есть параметр для обновления ASP.NET Core при использовании IIS Express. По умолчанию он не включен.

Вы по-прежнему можете использовать файлы launchSettings.json, как описано в статье.

person MADCookie    schedule 12.03.2021

В Visual Studio 2019

{
    "profiles": {
        "msteamsimc": {
        "commandName": "Executable",
        "executablePath": "dotnet",
        "commandLineArgs": "watch run",
        "workingDirectory": "$(ProjectDir)",
        "launchBrowser": true,
        "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        },
        "dotnetRunMessages": "true",
        "applicationUrl": "https://localhost:5001;http://localhost:5000"
    }
    }
}

вот изображение для конфг

введите описание изображения здесь

вот изображение для рабочего проекта 2021-01-11

введите описание изображения здесь

person Mohamed Elrashid    schedule 11.01.2021