在 Visual Studio 2017 中手动定义 launchSettings.json 中的端口
Manually defining ports in launchSettings.json in Visual Studio 2017
当我为 Visual Studio 创建新项目时,只需复制现有项目并 mod 修改 project/solution/config 文件,而不是剪切和粘贴一大堆文件,然后必须为每个文件设置构建操作。
这很好用,除了 IIS 调试设置。
如果我让它们保持不变,那么我一次只能调试一个项目,因为端口将被使用。
但是,如果我更改 launchSettings.json 中的端口(我使用的是 Asp Net Core,所以 Kestrel 有一个端口,还有一个 SSL 端口),没有任何效果。我现在处于这种情况,复制了一个项目并将两个端口号更改为新的随机端口,并且在有问题的项目中,从菜单中选择 'Start without debugging' 时,我什至没有启动网络服务器(虽然我确实有浏览器)。
在 VS 创建的项目中,我至少得到了一个由 'ASP NET Core Web Server' 启动的新输出 window 和 Kestrel 输出。
我明白 VS 可能必须做一些事情,比如注册一个自签名的 SSL 证书,也许 mod IIS Express 安装文件,但是能够做这些事情会很好我自己。
我尝试删除解决方案 .vs
文件夹并查看 Windows Documents
文件夹中的 IIS Express 文件夹(似乎没有 project/solution 具体内容)。
这是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/"
}
}
}
这是设置:
更新:看起来另一个密钥文件是 [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 端口号几位。不行。
好的,终于找到了:
...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 服务器启动输出中可见 Window
当我为 Visual Studio 创建新项目时,只需复制现有项目并 mod 修改 project/solution/config 文件,而不是剪切和粘贴一大堆文件,然后必须为每个文件设置构建操作。
这很好用,除了 IIS 调试设置。
如果我让它们保持不变,那么我一次只能调试一个项目,因为端口将被使用。
但是,如果我更改 launchSettings.json 中的端口(我使用的是 Asp Net Core,所以 Kestrel 有一个端口,还有一个 SSL 端口),没有任何效果。我现在处于这种情况,复制了一个项目并将两个端口号更改为新的随机端口,并且在有问题的项目中,从菜单中选择 'Start without debugging' 时,我什至没有启动网络服务器(虽然我确实有浏览器)。
在 VS 创建的项目中,我至少得到了一个由 'ASP NET Core Web Server' 启动的新输出 window 和 Kestrel 输出。
我明白 VS 可能必须做一些事情,比如注册一个自签名的 SSL 证书,也许 mod IIS Express 安装文件,但是能够做这些事情会很好我自己。
我尝试删除解决方案 .vs
文件夹并查看 Windows Documents
文件夹中的 IIS Express 文件夹(似乎没有 project/solution 具体内容)。
这是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/"
}
}
}
这是设置:
更新:看起来另一个密钥文件是 [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 端口号几位。不行。
好的,终于找到了:
...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 服务器启动输出中可见 Window