1

当我为 Visual Studio 创建新项目时,只需复制现有项目并修改项目/解决方案/配置文件,而不是剪切和粘贴一大堆文件,然后必须设置构建操作,工作量要少得多对于每个。

这很好用,除了IIS 调试设置。

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

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

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

我很欣赏 VS 可能需要做一些事情,比如注册一个自签名 SSL 证书,并且可能修改 IIS Express 设置文件,但是能够自己做这些事情会很好。

我尝试删除解决方案.vs文件夹并查看 Windows 文件夹中的 IIS Express 文件Documents夹(那里似乎没有任何项目/解决方案特定的东西)。

这是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 端口号几位数。它行不通。

4

1 回答 1

4

好的,终于找到了:我在哪里为 IISExpress 指定我的 SSL 端口?

注意: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 服务器启动输出窗口中可见
于 2019-12-05T00:40:32.777 回答