如何将 class 库项目中的文件和测试程序集包含到已发布的工件中

How to include files and test assemblies from a class library project into published artifacts

我有一个解决方案,其中包括一个 NET Core 3.1 Web API 项目和其他几个 NET Framework 4.8 Class 库项目。

在我的构建管道中,解决方案构建没有任何问题,我有一个非常简单的构建,但是我需要此构建的输出,例如测试程序集以及配置文件,以供我的发布管道使用。原因是我的发布管道与测试计划和测试套件相关联,运行 这些按需测试计划需要。

在我从包含测试程序集的构建管道 none 发布工件时,唯一包含的是来自 Web 应用程序的那些文件,我不需要这些文件来进行测试。我在几个不同的地方读过,我可以将其他项目添加为依赖项,但这对我来说似乎不正确,因为确实需要这些依赖项。是否有另一种方法可以让构建管道发布那些其他程序集和文件?

[更新] 解决方案 1: 我在其他地方看到建议的一种解决方案是使用 Copy files 任务将程序集复制到 ${Build.ArtifactStagingDirectory},然后发布工件,但要么它不起作用,要么我做错了什么。这是我对这 2 个任务的 YAML 定义:

task: CopyFiles@2
inputs:
Contents: '**'
TargetFolder: '${Build.ArtifactStagingDirectory}'

task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'tests'
publishLocation: 'Container'

CopyFiles 日志中的 FWIW 我确实看到文件正在被复制,例如:

Copying d:\a\s\test\BaseTest.cs to ${Build.ArtifactStagingDirectory}\test\BaseTest.cs

当您仅构建 class 库项目并直接在构建管道中发布工件时,这些测试程序集不会自动包含。

----Solution 
    ----NET Core 3.1 Web API project
    ----NET Framework 4.8 Class Library project 1
    ----NET Framework 4.8 Class Library project 2
    ...
    ----Test Project (Reference Class Library Project)

如果您构建测试项目,它将自动包含引用的 Class 库项目。当您发布构建工件时,它还将包含生成的测试程序集。

另一种可能是你没有选择正确的路径来复制dll,它使用的是class库项目下的路径而不是测试项目。

您需要先通过Copy Files task将生成的测试程序集复制到$(build.artifactstagingdirectory),然后与工件一起发布。