DNX Webjob 无法解析本地项目依赖

DNX Webjob fails to resolve local project dependencies

我们有一个使用 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-*"
      }
    }
  }

我们创建了 2 个 Web 应用程序,它们都与 Continuos Integration 绑定到解决方案存储库,并且每个都有指向 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\Tempd32044390806ef\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 在本地运行没有问题。

我尝试了 中的解决方案,但没有成功。

在与产品团队讨论后,默认情况下 3 项目方案现在无法使用。

中描述的解决方案适用于 2 个项目的情况,但是如果您需要部署依赖于相同 Class 库项目的 Web 作业和 Web 应用程序,并且 3 个都在相同的 repo,您​​不能从持续集成中部署 Webjob。

解决方案是为您的 Web 应用程序设置持续集成(它将默认运行)并手动将您的 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。