【问题标题】:DNX Webjob fails to resolve local project dependenciesDNX Webjob 无法解析本地项目依赖项
【发布时间】:2016-02-16 01:42:43
【问题描述】:

我们有一个使用 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 个 WebApp,它们都与 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\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 中的解决方案,但没有奏效。

【问题讨论】:

    标签: asp.net azure azure-webjobs


    【解决方案1】:

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

    publish dnx based WebJob with local dependencies 上描述的解决方案适用于 2 个项目方案,但如果您需要部署一个依赖于同一个类库项目的 WebJob 和一个 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。

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 2017-03-03
      • 1970-01-01
      • 2021-01-04
      • 2017-05-06
      • 1970-01-01
      • 2013-09-23
      • 2012-01-26
      • 1970-01-01
      相关资源
      最近更新 更多