当单元测试项目引用函数项目时,Azure 函数构建管道失败

Azure Function Build Pipelines Fails when Unit Test Project references the Function project

我正在使用 Visual Studio 2019 社区版,我有一个多层解决方案。下面是截图。

请注意,这是一个复制生产解决方案的示例项目,因此命名在这里可能并不重要。

项目规格:(全部netcoreapp3.1

  1. Sample.AzureFunction.Api - 目标框架:netcoreapp3.1和 Azure 函数版本:3.0.7
  2. { 应用程序、模型、ClassLibrary1 和 ClassLibrary2 } - 目标框架:netcoreapp3.1 并且都是“.netcore class 库”项目。
  3. ApiTests - 目标框架:netcoreapp3.1

问题

当存在从 ApiTest 项目到 Sample.AzureFunction.Api 的引用时,Azure Build Pipeline 失败。如果我删除项目引用,构建仍然是绿色的。这是管道中 build 步骤为 运行 时生成错误的屏幕截图。

基本上,所有的错误都是抱怨找不到一些dll。例如,CSC : error CS0006: Metadata file 'D:\a\s\publish_output\Application.dll' could not be found [D:\a\s\Sample.AzureFunction.Api\Tests\ApiTests\ApiTests.csproj]

几点注意事项:

  1. 管道中的 build 步骤是由 Azure DevOps 自动添加的 .net core
  2. 我没有专门的代理,我使用创建新 CI 时默认出现的 Azure Pipelines
  3. 代理规范是windows-2019

我使用 classic 视图来创建管道(无 YAML),但我可以通过单击每个步骤并复制 YAML 从生成的步骤中获取以下 YAML:

我已经花了一天时间解决这个问题,但现在 运行 没主意了。如有任何想法,我们将不胜感激。

如果您删除 --output 参数,您的构建将会成功。

看起来您的文件夹 publish_output 在编译测试项目之前已被清除。因此它在那里找不到这些dll。

此外,您不需要将所有 dll 作为工件发布。请使用发布命令为将要部署的代码创建工件:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsiteName'

我在 运行 原始管道后列出了 publish_output 文件夹,您可以在其中找到这些文件:

Application.deps.json
ClassLibrary1.deps.json
Function1
Sample.AzureFunction.Api.deps.json
bin
host.json