【问题标题】:publish dnx based WebJob with local dependencies发布具有本地依赖项的基于 dnx 的 WebJob
【发布时间】:2016-01-21 18:46:56
【问题描述】:

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

【问题讨论】:

    标签: c# azure azure-webjobs dnx


    【解决方案1】:

    这里是一个示例 repo,它可以工作 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 中有足够的智能,它就是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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 因此,如果我说文件夹“WebJob1”中包含 project.json 和 Program.cs,文件夹“ClassLib1”中包含 project.json 和 Model.cs,那么我应该只压缩 2 个这些文件夹? 我试过了,没用
      • 如果你有完全相同的结构,它会在本地运行吗?如果不是,那么这个问题更像是一个一般性的 dnx 问题,但与 WebJobs 没有具体关系。
      • 我正在使用这里描述的方法:ahmelsayed.com/running-dnx-based-webjobs 我不确定在这种情况下“完全相同的结构”是什么意思。
      • 是的,我和艾哈迈德谈过了。跟着他的回答走:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多