在Visual Studio 2017中的launchSettings.json中手动定义端口

时间:2019-12-04 10:09:53

标签: visual-studio asp.net-core iis-express visual-studio-debugging

当我为Visual Studio创建新项目时,只需复制一个现有项目并修改项目/解决方案/配置文件,而不是剪切并粘贴一大堆文件,然后进行设置就省了很多精力。每个构建动作。

除了 IIS调试设置之外,此方法效果很好。

如果我将它们保留不变,则一次只能调试一个项目,因为该端口将被使用。

但是,如果我更改了launchSettings.json中的端口(我使用的是Asp Net Core,那么Kestrel有一个端口,并且还有一个SSL端口),则没有任何效果。我现在处于这种情况,已经复制了一个项目并将两个端口号都更改为新的随机端口,并且在有问题的项目中,当从菜单中选择“不调试开始”时,我什至没有启动Web服务器(尽管我确实有浏览器)。

在VS创建的项目中,我至少得到一个由“ ASP NET Core Web Server”启动的新输出窗口,并带有Kestrel输出。

我很欣赏VS可能必须做一些事情,例如注册一个自签名SSL证书,或者修改IIS Express安装文件,但是最好自己动手做。

我尝试删除解决方案.vs文件夹,并查看Windows Documents文件夹中的IIS Express文件夹(其中似乎没有任何项目/解决方案的特定内容)。 / p>

这里是launchSettings.json(我要做的就是更改端口号和项目配置文件名称,例如My_AspMvc)

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost: 62649/",
      "sslPort": 44315
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "https://localhost: 44315/",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "My_AspMvc": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost: 62649/"
    }
  }
}

这是设置:

VSProjectProps

更新:看起来另一个密钥文件是[SolutionFolder]\.vs\config\applicationhost.config

  <site name="My_AspMvc" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
      <virtualDirectory path="/" physicalPath="C:\Projects\MySoln\My_AspMvc" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:62649:localhost" />
      <binding protocol="https" bindingInformation="*:44315:localhost" />
    </bindings>
  </site>

这个难题的两个重要要素:

  • 如果创建一个新的ASP NET Core项目,请启动它,然后将SSL端口复制到您的现有项目中,该端口从那时起便可以使用。显然,它已在系统全局某个位置注册。如果不创建新项目,则该端口将无法使用。

  • 请注意,模仿整个过程的一种简单方法是仅在现有的工作过程中打开launchSettings.json,然后将SSL端口号随机更改几位。这是行不通的。

1 个答案:

答案 0 :(得分:0)

好的,终于找到了这个:Where do I specify my SSL port for IISExpress?

https://docs.microsoft.com/en-us/iis/extensions/using-iis-express/running-iis-express-without-administrative-privileges

中指出

... SSL端口必须介于44300和44399之间。我的问题是,我没有保持此范围。

对所有这些发现进行快速总结:

  • Visual Studio使用IIS Express调试ASP NET项目
  • 除了下面概述的内容外,SSL没有特定于端口的全局配置
  • IIS Express在其中具有默认配置文件 C:\Users\[UserName]\Documents\IISExpress\config\applicationhost.config
  • 当VS启动IIS Express时,它会传递一个本地项目特定的配置文件,该文件将取代默认文件:[SolutionFolder]\.vs\config\applicationhost.config
  • SSL端口必须介于44300和44399之间,并且在 [SolutionFolder]\.vs\config\applicationhost.config [ProjectFolder]\Properties\launchSettings.json
  • 看来您实际上可以删除整个[SolutionFolder]\.vs\,并且它将在下次调试启动时重新构建(因此这是一个选项,而不是进行编辑)
  • 应用程序的实际(Kestrel HTTP)端口似乎与launchSettings或applicationHost中指定的端口无关,但在Web服务器启动的“输出窗口”中可见