当单元测试项目引用函数项目时,Azure 函数构建管道失败
Azure Function Build Pipelines Fails when Unit Test Project references the Function project
我正在使用 Visual Studio 2019 社区版,我有一个多层解决方案。下面是截图。
请注意,这是一个复制生产解决方案的示例项目,因此命名在这里可能并不重要。
项目规格:(全部netcoreapp3.1
)
- Sample.AzureFunction.Api - 目标框架:
netcoreapp3.1
和 Azure 函数版本:3.0.7
- { 应用程序、模型、ClassLibrary1 和 ClassLibrary2 } - 目标框架:
netcoreapp3.1
并且都是“.netcore class 库”项目。
- 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]
几点注意事项:
- 管道中的
build
步骤是由 Azure DevOps 自动添加的 .net core
。
- 我没有专门的代理,我使用创建新 CI 时默认出现的
Azure Pipelines
。
- 代理规范是
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
我正在使用 Visual Studio 2019 社区版,我有一个多层解决方案。下面是截图。
请注意,这是一个复制生产解决方案的示例项目,因此命名在这里可能并不重要。
项目规格:(全部netcoreapp3.1
)
- Sample.AzureFunction.Api - 目标框架:
netcoreapp3.1
和 Azure 函数版本:3.0.7
- { 应用程序、模型、ClassLibrary1 和 ClassLibrary2 } - 目标框架:
netcoreapp3.1
并且都是“.netcore class 库”项目。 - 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]
几点注意事项:
- 管道中的
build
步骤是由 Azure DevOps 自动添加的.net core
。 - 我没有专门的代理,我使用创建新 CI 时默认出现的
Azure Pipelines
。 - 代理规范是
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