опубликовать WebJob на основе dnx с локальными зависимостями

Я пытаюсь опубликовать свое веб-задание на основе DNX в Azure. Для этого я добавляю свои файлы project.json и Program.cs в некий ZIP-архив и загружаю его через портал Azure. Это прекрасно работает, но теперь я хочу, чтобы мой проект WebJob ссылался на какой-то другой локальный проект на основе DNX (просто простая библиотека классов). Как загрузить в этом случае?


person Oleg Golovkov    schedule 22.10.2015    source источник


Ответы (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
person ahmelsayed    schedule 22.10.2015

Здесь нет ничего особенного в веб-заданиях. Возникает вопрос: если бы вы запускали это вручную из какой-нибудь автономной папки на вашем локальном компьютере, какой набор файлов вы бы включили? Затем, каким бы ни был этот набор файлов, вы захотите заархивировать его для использования в своем веб-задании.

person David Ebbo    schedule 22.10.2015
comment
Итак, если у меня есть папка «WebJob1 с project.json и Program.cs в ней и папка «ClassLib1» с project.json и Model.cs в ней, то я должен заархивировать только 2 эти папки? пробовал так сделать, не получилось - person Oleg Golovkov; 22.10.2015
comment
Работает ли он локально, если у вас точно такая же структура? Если нет, то проблема больше связана с общим вопросом dnx, но не связана конкретно с веб-заданиями. - person David Ebbo; 22.10.2015
comment
Я использую метод, описанный здесь: ahmelsayed.com/running-dnx-based-webjobs Я не уверен, что в данном случае означает точно такая же структура. - person Oleg Golovkov; 22.10.2015
comment
Да, я говорил с Ахмедом. Иди с его ответом :) - person David Ebbo; 23.10.2015