如何将 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)
,然后与工件一起发布。
我有一个解决方案,其中包括一个 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)
,然后与工件一起发布。