使用本地依赖项发布基于dnx的WebJob

时间:2015-10-22 13:11:39

标签: c# azure azure-webjobs dnx

我试图将基于DNX的WebJob发布到Azure。为此,我将project.json和Program.cs文件添加到一些ZIP-archive并通过Azure门户上传。这工作正常,但现在我希望我的WebJob项目引用一些其他本地基于DNX的项目(只是一个简单的类库)。在这种情况下如何上传?

2 个答案:

答案 0 :(得分:6)

这是一个有效的样本仓库https://github.com/ahmelsayed-test/DnxWebJobWithClassLibrary。克隆,压缩,上传。它应该工作!

不幸的是,DNX webJob的支持还没有完成,所以这个场景没有开箱即用,你需要一个魔术run.cmd在回购中,也是在这个答案下面。

DNX的文件夹结构是项目应位于不同的兄弟文件夹中。所以,如果你看一下repo中的文件夹结构,就像这样

|   run.cmd
|
+---ClassLibrary
|       Class.cs
|       project.json
|
\---ConsoleApp
        Program.cs
        project.json
run.cmd中的

有一个环境变量DNX_CONSOLE_APP_PATH,您需要手动将其指向控制台应用的project.json。在这种情况下,只有kudu中有足够的智慧,它才会ConsoleApp\project.json你不应该在你的网络工作中拥有这个run.cmd。如果您查看kudu,它会使用非常相似的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

答案 1 :(得分:2)

这里WebJobs真的没有什么特别之处。要问的问题是:如果您要从本地计算机上的某个自包含文件夹手动运行此文件,那么您将包含哪些文件?然后,无论这组文件是什么,您都希望压缩在WebJob中使用。