Я пытаюсь опубликовать свое веб-задание на основе DNX в Azure. Для этого я добавляю свои файлы project.json и Program.cs в некий ZIP-архив и загружаю его через портал Azure. Это прекрасно работает, но теперь я хочу, чтобы мой проект WebJob ссылался на какой-то другой локальный проект на основе DNX (просто простая библиотека классов). Как загрузить в этом случае?
опубликовать WebJob на основе dnx с локальными зависимостями
Ответы (2)
Вот пример репозитория, который работает https://github.com/ahmelsayed-test/DnxWebJobWithClassLibrary. Клонируйте его, заархивируйте и загрузите. Он должен работать!
К сожалению, поддержка DNX webJob еще не завершена, поэтому этот сценарий не работает из коробки, вам нужен волшебный run.cmd
, который есть в репо, а также ниже в этом ответе.
Структура папок для DNX такова, что проекты должны находиться в разных родственных папках. Итак, если вы посмотрите на структуру папок в репо, это будет так
| run.cmd
|
+---ClassLibrary
| Class.cs
| project.json
|
\---ConsoleApp
Program.cs
project.json
в run.cmd
есть переменная среды DNX_CONSOLE_APP_PATH
, которую вам нужно указать на project.json
консольного приложения вручную. В данном случае это ConsoleApp\project.json
, если в куду достаточно смартов. Вам не нужно иметь это run.cmd
в вашей веб-работе. Если вы посмотрите в куду, там используется очень похожий runDnxWebJob.cmd
Просто недостаточно умен, чтобы найти правильный путь для консольного приложения.
@ECHO OFF
:: 1. Prepare environment
SET DNX_CONSOLE_APP_PATH=ConsoleApp\project.json
SET DNVM_CMD_PATH_FILE="%USERPROFILE%\.dnx\temp-set-envvars.cmd"
:: 2. Install DNX
IF EXIST global.json (
CALL PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';$CmdPathFile='%DNVM_CMD_PATH_FILE%';& '%SCM_DNVM_PS_PATH%' " install -File global.json
IF ERRORLEVEL 1 GOTO ERROR
) ELSE (
CALL PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';$CmdPathFile='%DNVM_CMD_PATH_FILE%';& '%SCM_DNVM_PS_PATH%' " install latest
IF ERRORLEVEL 1 GOTO ERROR
)
:: 3. Put DNX on the path
IF EXIST %DNVM_CMD_PATH_FILE% (
CALL %DNVM_CMD_PATH_FILE%
DEL %DNVM_CMD_PATH_FILE%
)
:: 4. Run dnu restore
CALL dnu restore
IF ERRORLEVEL 1 GOTO ERROR
:: 5. Run the WebJob
CALL dnx --project "%DNX_CONSOLE_APP_PATH%" run
IF ERRORLEVEL 1 GOTO ERROR
GOTO END
:ERROR
ENDLOCAL
ECHO An error has occurred during running DNX WebJob.
CALL :EXITSETERRORLEVEL
CALL :EXITFROMFUNCTION 2>NUL
:EXITSETERRORLEVEL
EXIT /b 1
:EXITFROMFUNCTION
()
:END
ECHO DNX WebJob ended
Здесь нет ничего особенного в веб-заданиях. Возникает вопрос: если бы вы запускали это вручную из какой-нибудь автономной папки на вашем локальном компьютере, какой набор файлов вы бы включили? Затем, каким бы ни был этот набор файлов, вы захотите заархивировать его для использования в своем веб-задании.