发布具有本地依赖项的基于 dnx 的 WebJob
publish dnx based WebJob with local dependencies
我正在尝试将基于 DNX 的 WebJob 发布到 Azure。为此,我将我的 project.json 和 Program.cs 文件添加到某个 ZIP 存档并通过 Azure 门户上传。这工作正常,但现在我希望我的 WebJob 项目引用其他一些基于 DNX 的本地项目(只是一个简单的 class 库)。这种情况下如何上传?
这里的 WebJobs 确实没有什么特别之处。要问的问题是:如果您要从本地计算机上的某个 独立 文件夹手动 运行 此操作,您会包含哪些文件集?然后无论这组文件是什么,您都需要压缩以便在您的 WebJob 中使用。
这是一个有效的示例存储库 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
there is an environment variable DNX_CONSOLE_APP_PATH
that you need to point it to the project.json
of the console app manually. In this case it's ConsoleApp\project.json
once there is enough smarts in kudu You shouldn't need to have this run.cmd
in your webjob. If you look in kudu, it uses a very similar 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
我正在尝试将基于 DNX 的 WebJob 发布到 Azure。为此,我将我的 project.json 和 Program.cs 文件添加到某个 ZIP 存档并通过 Azure 门户上传。这工作正常,但现在我希望我的 WebJob 项目引用其他一些基于 DNX 的本地项目(只是一个简单的 class 库)。这种情况下如何上传?
这里的 WebJobs 确实没有什么特别之处。要问的问题是:如果您要从本地计算机上的某个 独立 文件夹手动 运行 此操作,您会包含哪些文件集?然后无论这组文件是什么,您都需要压缩以便在您的 WebJob 中使用。
这是一个有效的示例存储库 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
there is an environment variable DNX_CONSOLE_APP_PATH
that you need to point it to the project.json
of the console app manually. In this case it's ConsoleApp\project.json
once there is enough smarts in kudu You shouldn't need to have this run.cmd
in your webjob. If you look in kudu, it uses a very similar 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