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

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

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

不幸的是,对DNX webJob的支持还没有完成,所以这种情况不是开箱即用的,你需要一个魔术run.cmd ,它位于repo中,也在下面的答案中。

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

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

run.cmd有一个环境变量DNX_CONSOLE_APP_PATH ,您需要手动将其指向控制台应用程序的project.json 。 在这种情况下,一旦在kudu中有足够的run.cmd ,它就是ConsoleApp\project.json你不需要在你的webjob中拥有这个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 

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