发布基于dnx的带有本地依赖的WebJob

本文关键字:依赖 WebJob 布基于 dnx | 更新日期: 2023-09-27 18:18:53

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

发布基于dnx的带有本地依赖的WebJob

下面是一个可用的示例repo 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。在这种情况下,它是ConsoleApp'project.json,一旦kudu有足够的智能,你不需要在你的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中使用。