如何在 Visual Studio 中的不同端口上运行 Azure Function 应用程序
Posted
技术标签:
【中文标题】如何在 Visual Studio 中的不同端口上运行 Azure Function 应用程序【英文标题】:How to run Azure Function app on a different port in Visual Studio 【发布时间】:2017-12-12 02:42:27 【问题描述】:我在 local.setting.json 中设置本地主机端口。参考微软文档https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local
文件如下所示
"IsEncrypted": false,
"Values":
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": ""
,
"Host":
"LocalHttpPort": 7073
当我运行/调试解决方案时,VS 仍然在默认端口 (7071) 上托管应用程序
我检查了 bin 目录,local.setting.json
文件通过上述设置到达那里。
从 bin 目录运行 Azure Fucntion CLI (func host start
) 正确读取端口号。
看起来 VS 没有使用"LocalHttpPort
" 端口。设置中是否需要进行任何其他更改。我有 Visual Studio 2017 Preview (2)
【问题讨论】:
在 VS2017 15.9.5 中使用Microsoft.NET.Sdk.Functions
v1.0.26 你的方法工作得很好。
【参考方案1】:
更新:如果您只是想更改端口,则不必通过问题中指定的文件进行设置。检查Thuc Nguyen answer
原答案:
命令行优先于设置文件,问题是VS在命令行上传递了一个明确的端口。
解决方法是通过project -> properties -> Debug
,然后在Application arguments
下控制参数。你可以输入host start --pause-on-error
从 ravinsp 编辑:
.Net Core 2.0 功能项目更新:
您必须传递的命令行参数不同。您必须将路径传递给前面的dll。像这样:
%AppData%\..\Local\Azure.Functions.V2.Cli\2.0.1-beta.22\Azure.Functions.Cli.dll host start --pause-on-error
您可以通过在Visual Studio中运行该函数并使用进程资源管理器查看命令行参数来查看dotnet.exe进程。
编辑:一个词
【讨论】:
唉,这不适用于 .NET Core 2.0 版本的 Functions 工具,仅适用于 .NET Framework 版本。 在 .Net Core 2.0 中,您必须将以下内容作为命令行参数。我在通过 VS 运行该功能时通过进程资源管理器发现了这一点。将其放在“应用程序参数”字段中:C:\Users\当您通过 NPM 安装 Azure Functions Core Tools 2.x Runtime 时,Visual Studio 2017 中 .NET Core 2.0 / .NET Standard 2.0 Azure Functions 项目的正确答案
我关注了@ahmelsayed 的回答,特别是@ravinsp 的.net core 2.0 cmets 的cmets。虽然非常有帮助并使我走上正轨,但如果没有关键且非直观的修改,它们对我不起作用,所以我添加了一个新的答案。
TL;DR;
如果你使用 NPM 安装 Azure Functions Core Tools 2.x Runtime,那么你可能需要将 Project/Properties/Debug/Application Arguments 设置为:
C:\Users\<myuserid>\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin\func.dll host start --port 8888 --pause-on-error
下面是长答案...
我的设置
在本练习中,我的设置完全是最新的(在撰写本文时),如下所示:
Visual Studio 2017 专业版:15.6.2 Azure Functions 和 Web 作业工具:15.0.40215.0 Windows 10 10.0.16299 内部版本 16299Azure Functions Core Tools(根据 Microsoft 的 Develop and run Azure functions locally 文档安装)报告(在 Git Bash 中):
me@MYDESKTOP ~
$ func
<snip/>
Azure Functions Core Tools (2.0.1-beta.24)
Function Runtime Version: 2.0.11587.0
fwiw,Azure 上此 Functions App 的 Functions App 设置选项卡显示:
Runtime version: 2.0.11587.0 (beta)
我的问题
当我运行我的函数项目(没有应用程序参数)时,我在控制台输出中得到了这个:
[17/03/2018 21:06:38] Starting Host (HostId=MYMACHINE, Version=2.0.11353.0, ProcessId=<snip/>
Listening on http://localhost:7071/
这本身可能不是问题,但我越来越讨厌“在我的机器上工作,发布到 azure 时失败”类型的问题,所以我想确保本地执行使用与运行时相同的函数天蓝色(即 2.0.11587.0,根据上面的设置说明,它是/应该是,对吧?)
因此,根据@ravinsp 的说明,我在我的 C 驱动器上运行查找以找到 Azure.Functions.Cli.dll - 只有一个,它位于 C:\Users\<myuserid>\AppData\Local\Azure.Functions.V2.Cli\2.0.1-beta\Azure.Functions.Cli.dll
,这似乎与 @ravinsp 的答案非常一致。
所以,我添加了以下项目/属性/调试/应用程序参数:
C:\Users\<myuserid>\AppData\Local\Azure.Functions.V2.Cli\2.0.1-beta\Azure.Functions.Cli.dll host start --port 8888 --pause-on-error
然后我得到端口 8888,但奇怪的是运行时 仍然被报告为 2.0.11353。
[17/03/2018 21:13:02] Starting Host (HostId=MYMACHINE, Version=2.0.11353.0, ProcessId=<snip/>
Listening on http://localhost:8888/
解决方案
鉴于按照上述从 Git Bash 运行的 func 显示运行时为 2.0.11587.0,我尝试了 which func
,它返回了 /c/Users/<myuserid>/AppData/Roaming/npm/func
。我在上面做了一只猫,长话短说,我可以看到它最终运行的是C:\Users\<myuserid>\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin\func.exe
,并且在同一个目录中有一个func.dll
。
所以,我尝试了以下项目/属性/调试/应用程序参数:
C:\Users\<myuserid>\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin\func.dll host start --port 8888 --pause-on-error
那我终于明白了……
[17/03/2018 21:16:29] Starting Host (HostId=MYMACHINE, Version=2.0.11587.0, ProcessId=<snip/>
Listening on http://localhost:8888/
而且,至关重要的是,我在发布到 Azure 时遇到的错误也开始在本地表现出来。
好的,现在运行时都同步了,是时候开始修复我的实际错误了 :)
【讨论】:
【参考方案3】:我使用了已接受的答案,但在调试器端口尝试绑定时仍然出现错误,因为两个函数应用都尝试绑定到 5858。
为了解决这个问题,我在项目设置中为应用程序参数添加了一个属性,我的参数如下所示:
host start --pause-on-error --nodeDebugPort 5860
【讨论】:
【参考方案4】:我使用的是 CLI 版本 1.2.1,Project Properties -> Debug
中的以下 Application arguments
设置对我有用。
host start --port 7074 --nodeDebugPort 5860
【讨论】:
这对我有用。此页面上针对我的问题的最简单解决方案。 应该是真正的答案,我特别想同时调试至少 2 个函数,并且需要最好的方法来告诉每个函数在哪个端口上运行 我认为这也是标题中问题的正确答案。接受的答案是解决作者遇到的特定问题,但标题更通用,这个答案更合适。 为什么这不是公认的答案?非常感谢! :) 我也喜欢这个方案,简单,好控制。【参考方案5】:更新项目属性 -> 调试到以下
主机启动 --port 7073 --pause-on-error
【讨论】:
我可以确认这适用于 V3 函数和 VS 2019。【参考方案6】:如果您使用 Visual Studio for MacOS,请右键单击您的项目,单击选项,单击 Run -> Configurations -> Default
并在参数字段中输入 host start --port 7073 --pause-on-error
。
【讨论】:
【参考方案7】:这样做
选择 Function App Project in Visual Studio -> Hit Alt+Enter
并导航到调试设置并设置
host start --port 8085 --nodeDebugPort 6890
【讨论】:
【参考方案8】:截至此版本:
Azure Functions Core Tools (3.0.2912 Commit hash: bfcbbe48ed6fdacdf9b309261ecc8093df3b83f2)
Function Runtime Version: 3.0.14287.0
您只需在应用程序参数框中输入start --port 7074
【讨论】:
这是 Functions v3, Visual Studio 2019+ 的正确答案【参考方案9】:这是我在 local.settings.json 文件中使用不同端口的方式,同时在 Intellij 中运行它。您也可以使用任何其他 IDE,local.settings.json 无处不在。
"IsEncrypted": false,
"Values":
"FUNCTIONS_WORKER_RUNTIME": "java"
,
"Host":
"LocalHttpPort": 7072
,
"ConnectionStrings":
【讨论】:
以上是关于如何在 Visual Studio 中的不同端口上运行 Azure Function 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 2010 在 C# 中的两台不同机器上运行的客户端和服务器之间的通信
如何强制 Visual Studio 在 https 中运行网站
终端中的 Git 版本与 Visual Studio Code 中的不同
如何在 Visual Studio 中混合不同编译器版本的程序:?