Skip to main content
 首页 » 编程设计

c#之发布具有本地依赖项的基于 dnx 的 WebJob

2024年01月22日56mayingbao

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

请您参考如下方法:

这是一个有效的示例 repo https://github.com/ahmelsayed-test/DnxWebJobWithClassLibrary .克隆它,压缩它,然后上传它。它应该工作!

不幸的是,对 DNX webJob 的支持还没有完成,所以这个场景不能开箱即用,你需要一个魔法 run.cmd那在 repo 中,也在这个答案的下方。

DNX 的文件夹结构是项目应该位于不同的同级文件夹中。因此,如果您查看存储库中的文件夹结构,就像这样

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

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