【问题标题】:How to watch for file changes "dotnet watch" with Visual Studio ASP.NET Core如何使用 Visual Studio ASP.NET Core 监视文件更改“dotnet watch”
【发布时间】:2017-03-02 08:39:23
【问题描述】:

我正在使用带有 ASP.NET Core 的 Visual Studio 并仅使用 F5 或 Ctrl+F5 运行网站(不直接使用命令行)。我想使用“dotnet watch”功能来确保所有更改都被即时获取,以避免再次启动服务器。似乎使用命令行你会为此使用“dotnet watch run”,但 Visual Studio 使用 launchSettings.json 并在我理解正确的情况下在幕后执行。

我怎样才能在那里连接“dotnet watch”?

【问题讨论】:

  • 我认为您对“观看”功能的印象是错误的。当您更改文件时,您的应用程序重新启动,并且必须在第一次请求时再次预热或填充它的缓存(因为内存中缓存的内容在重新启动时会丢失)
  • 好吧,我的意思是不需要“手动重启”应用程序。所以我明白这不是什么魔法,如果有类似的不会重新启动整个应用程序的 cshtml 视图重新编译,那就太好了。

标签: asp.net-core dnx kestrel-http-server


【解决方案1】:

如果你想使用 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"
      }
    }
    

对于 .Net 5 和 6

在 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" 具有所需的所有其他属性:launchBrowserapplicationUrlenvironmentVariablesdotnetRunMessageshotReloadProfile。应该在那里进行任何修改。

Juan Cruz Fiant 的相应博文:https://dev.to/juxant/auto-refresh-with-dotnet-watch-for-asp-net-core-projects-20no

【讨论】:

  • 这锁定了我的c#文件,运行时,我无法编辑文件,有什么线索吗?
  • 这行得通,但是我必须更改相对项目路径才能上 3 个目录而不是 4 个。例如:"commandLineArgs": "watch --project ..\\..\\..\\YOUR_PROJECT.csproj run"
  • 如果添加"workingDirectory": "$(ProjectDir)",,则可以删除--project ... arg。
  • 尽管"launchBrowser": true, 我的浏览器没有启动。这对其他人有用吗?
  • 它也不会为我启动浏览器。我必须手动完成。
【解决方案2】:

打开 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 中观看。

【讨论】:

  • 感谢您的回答。毕竟这很容易。没有猜到自己你可以直接使用 dotnet 作为命令行和 launchSettings.json :)。尽管它似乎确实会完全重启应用程序,但这几乎可以通过在 IIS Express 后面运行并构建应用程序来实现。如果您做了很多更改,我猜手表会在每个文件保存时重新启动。所以选择应该取决于你处于什么发展阶段(你改变东西的频率)。
  • 似乎没有发现任何变化。还有什么其他喜欢它来观看适当的目录吗?
  • @Marchy 你的目录结构是什么?你的launch.json 文件在哪里?换句话说,你尝试过什么?可能值得提出一个新问题来说明您所面临的情况。
  • 运行时,它不会让我从 IDE 更改任何文件,哈哈。
  • 嗨@ShaunLuttin 我已经尝试使用.net core 2.0.3 的watcher 2.0.0 并且它不工作,当我调试应用程序时它会打开空白的隐藏控制台并且应用程序不会启动,你有吗面对这样的事情
【解决方案3】:

对@Flynn 的回答稍作修正。您需要添加一个

"commandName": "Executable"

“观看”配置文件的参数。另外要定义网址,您应该不在“Watch”配置文件中定义它们,而是在配置文件中定义它们

"commandName": "Program"

参数(它存在于由 Visual Studio 项目模板创建的默认 launchsettings.json 中,因此,您的 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"
}

我在Program 配置文件中保留了launchBrowser 参数,但未启动浏览器。但如果Executable 配置文件中存在此参数,则浏览器也不会启动,我发现无法自动启动它。

【讨论】:

  • @serge "项目"
【解决方案4】:
"Watch": {
  "commandName": "Project",
  "launchBrowser": true,
  "launchUrl": "http://localhost:5000/",
  "commandLineArgs": "watch run",
  "workingDirectory": "$(ProjectDir)",
  "executablePath": "dotnet.exe",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }
}

这个也可以工作并启动浏览器。由于"commandName": "Project" 行,它可以工作,这意味着它将与 Kestrel 服务器一起启动。

【讨论】:

  • 这应该是公认的答案。 VS 2019 v16.10.2。
【解决方案5】:

接受的答案有效,但它已有 4 年以上的历史。因此,这是使它适用于 Visual Studio 2019(在我的情况下为 v16.8.5)的方法。

launchSettings.jsonprofiles 部分中,添加一个新配置文件,比如“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 UI 作为默认页面)都会自动发生。


关于在调试模式下使用它的一个注意事项是,Visual Studio 会将更改标记为绿色,并说在重新启动之前不会应用它们。我可以确认这不是真的,并且 dotnet watch run 的自动重建功能确实反映了这些更改。只是 VS 2019 搞糊涂了,从旧的(标准)角度看待事情。

【讨论】:

  • 技术上最好的解决方案。谢谢。
  • 在许多 cmets 和几个关于这个主题的网站之后,你的回答帮助了我。谢谢你,迈克!
【解决方案6】:

对于其他阅读这些非常古老的答案并想知道它是否已经完成的人,那么您应该阅读 2020 年 11 月 22 日的这篇博文。

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

Visual Studio 2019 现在有一个设置,用于在使用 IIS Express 时刷新 ASP.NET Core。默认不启用。

您仍然可以按照文章中的说明使用 launchSettings.json 文件。

【讨论】:

    【解决方案7】:

    打开 launchSettings.json 并将其添加到配置文件中。

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

    【讨论】:

      【解决方案8】:

      在 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 的图片

      【讨论】:

        猜你喜欢
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 2018-06-30
        • 2017-11-29
        • 2022-10-16
        • 1970-01-01
        相关资源
        最近更新 更多