DNX Webjob无法解决本地项目依赖关系

时间:2016-01-22 13:24:51

标签: asp.net azure azure-webjobs

我们有一个使用VS2015.1创建的解决方案,它有3个项目,所有项目都是 DNX RC1

| sln
|+---MVC6 Api
|      project.json
| +---ClassLibrary 
|      Class.cs 
|      project.json 
| \---Webjob 
      Program.cs  
      project.json

API和Webjob都在他们的project.json文件中引用ClassLibrary。

 "frameworks": {
    "dnx451": {
      "dependencies": {
        "ClassLibrary": "1.0.0-*"
      }
    }
  }

我们创建了两个WebApp,两者都与Continuos Integration绑定到Solution repo,每个都有一个Project Application Setting,指向API文件夹(在一个中)和Webjob文件夹(在另一个中)。

当API项目尝试解决它工作的本地项目依赖项时,它会毫无问题地部署:

Using Project dependency ClassLibrary 1.0.0 for DNX,Version=v4.5.1
Copying source code from Project dependency ClassLibrary
    Source D:\home\site\repository\ClassLibrary\project.json
    Target D:\local\Temp\8d32044390806ef\approot\src\ClassLibrary

另一方面,Webjob失败了,它尝试将其解析为nuget远程包并失败:

[01/21/2016 19:47:45 > b597c3: INFO]   GET https://api.nuget.org/v3-flatcontainer/ClassLibrary/index.json
[01/21/2016 19:47:46 > b597c3: INFO]   NotFound https://api.nuget.org/v3-flatcontainer/ClassLibrary/index.json 507ms
[01/21/2016 19:47:46 > b597c3: ERR ] Unable to locate Dependency ClassLibrary >= 1.0.0-*

最后一部分我必须通过Kudu检查它,因为它在第一次运行WebJob时显然而不是在部署阶段(如API)。

在本地运行WebJob可以顺利运行。

我在publish dnx based WebJob with local dependencies尝试了解决方案,但没有成功。

1 个答案:

答案 0 :(得分:1)

在与产品团队交谈后,默认情况下,3项目方案现在无法正常工作。

publish dnx based WebJob with local dependencies上描述的解决方案适用于2项目场景,但是如果您需要部署依赖于同一类库项目的WebJob和Web App,并且3在同一个仓库中,您可以& #39;使Webjob从持续集成部署。

解决方案是为Web App设置持续集成(默认情况下可以正常工作),并将WebJob手动部署为压缩文件。

进入您的WebJob文件夹并运行dnu publish

进入bin/output/approot/src/YourWebJobFolder

修改自动生成的 CMD文件

通过自定义第4行使用此脚本:

@ECHO OFF

:: 1. Prepare environment
SET DNX_CONSOLE_APP_PATH=Autocosmos.Trunk.Webjob
SET DNVM_CMD_PATH_FILE="%USERPROFILE%\.dnx\temp-set-envvars.cmd"

:: 2. Install DNX
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%
)

call :ExecuteCmd dnx  --project "%~dp0src\%DNX_CONSOLE_APP_PATH%" --configuration Release %DNX_CONSOLE_APP_PATH% run

goto end

:ExecuteCmd
setlocal
set _CMD_=%*
call %_CMD_%
if "%ERRORLEVEL%" NEQ "0" echo Failed exitCode=%ERRORLEVEL%, command=%_CMD_%
exit /b %ERRORLEVEL%

:error
endlocal
echo An error has occurred during web site deployment.
call :exitSetErrorLevel
call :exitFromFunction 2>nul

:exitSetErrorLevel
exit /b 1

:exitFromFunction
()

:end
endlocal
echo Finished successfully.

然后 ZIP bin / output / approot 上传它到Azure。