Как func.exe распознает конкретную функцию, запущенную из VS2019? - PullRequest
0 голосов
/ 03 октября 2019

Примите Http Trigger. Когда он запускается из VS2019, VS2019 запускает команду

 C:\Users\<user>\AppData\Local\AzureFunctionsTools\Releases\1.10.0\cli\func.exe host start --port 7071 --pause-on-error

, что означает, что команда не предоставляет никакой информации о каких-либо функциях. VS2019 также запускает команду

 C:\Users\<user>\.nuget\packages\microsoft.net.sdk.functions\1.0.24\tools\net46\Microsoft.NET.Sdk.Functions.Generator.exe "....\bin\Debug\net461\bin\AzureFunction.dll " "....\bin\Debug\net461\ "

, которая, очевидно, предоставляет информацию о функции. Генератор.exe, кажется, создает файл function.json в папке проекта. Но как func.exe узнает об этом?

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Я немного поиграл с func.exe напрямую, из командного окна разработчика, вне VS2019.

Во-первых, func.exe использует CurrentDirectory окружения, поэтому VS2019 должен явно установить его перед запуском func.exe

Во-вторых, и это самое главное, func.exe сканирует подпапки ALL из корневого каталога проекта, где расположен файл host.json, и ищет все файлы с именемfunction.json. Когда VS2019 запускает func.exe, он устанавливает для CurrentDirectory путь, который уже включает bin \ Debug \ net461, что означает, что func.exe не ищет никакой bin \ Debug

Имя fname где ... / fname / functionОбнаружено, что .json становится именем функции, например, здесь имя функции становится «Function8», потому что func.exe запускается из CurrentDirectory с установленным значением ... \ bin \ Debug \ net461

 ...\bin\Debug\net461\Function8\function.json

здесь имя функциитакже становится «Function8», даже если \ Current \ Debug \ не является частью CurrentDirectory

 ...\Function8\function.json

. Существуют также другие факторы, например, скомпилирована ли функция как * .dll или предоставлена ​​как исходный код *. CSX. Все это не документировано и должно.

0 голосов
/ 07 октября 2019

'func.exe' предлагается Azure Function Core Tools . это определит, есть ли файл function.json в какой-либо папке в bin / Debug. Если в папке несколько функций, «func.exe» запустит их все (выполнение func.exe зависит от function.json. Если function.json не существует, функция не запустится)

Таким образом, «func.exe» не может распознать определенную функцию. Причина, по которой 'func.exe', кажется, распознает конкретную функцию в VS 2019, заключается в том, что func.exe ищет function.json в подпапке bin / Debug, когда вы используете VS 2019 для запуска функции, а в подпапке естьтолько один файл json.

...