将测试数据部署为nuget包

问题描述 投票:0回答:1

(不是可以通过 nuget 包部署数据而不使用程序集吗?,因为包结构在过去 12 年里发生了变化)

我有一些大型测试数据文件,我想将它们部署到相对于使用它们的测试项目的已知位置。这不是为了发布或部署,只是在开发期间。重要的是,我能够指定文件的相对位置(即 not 内的 OutputDir 或 bin/x64/Debug/net6.0 等),但由于我控制了包和消费者的两侧,我很高兴能够在任一侧指定它。

为了 CI 方便,这应该在正常的 dotnet 恢复中发生。如果它需要一个构建阶段,则不应重新复制文件,除非它们已更改。

(子问题:最详细的“dotnet Restore”文档在哪里?似乎有很多神奇的包文件夹被定义来做各种事情?)

nuget nuget-package-restore
1个回答
0
投票

以下是在开发过程中将大型测试数据文件部署到与测试项目相关的已知位置的几种方法,确保 CI 兼容性和高效复制:

1。在测试项目中使用自定义目标:

  • 将自定义目标添加到测试项目的 MSBuild 文件 (.csproj) 以在构建过程中复制文件。
  • 示例:
<Target Name="CopyTestData" AfterTargets="Build">
  <Copy SourceFiles="@(TestData)" DestinationFolder="$(ProjectDir)TestData\%(RecursiveDir)%(Filename)%(Extension)" SkipUnchangedFiles="true" />
</Target>
  • 使用通配符包含测试数据文件:
<ItemGroup>
  <TestData Include="..\TestData\**\*" />
</ItemGroup>

2。在预构建期间复制文件:

  • 向测试项目添加预构建事件,以在构建开始之前复制文件。
  • 示例(使用 PowerShell):
Copy-Item -Path "..\TestData\*.*" -Destination "$(ProjectDir)TestData" -Recurse -Force

3.利用单独的包:

  • 创建一个包含测试数据文件的单独包。
  • 将此包作为依赖项添加到测试项目中。
  • 在构建过程中使用自定义 MSBuild 任务或构建脚本将文件解压到所需位置。

4。使用恢复后脚本:

  • 将恢复后脚本添加到测试项目的
    .csproj
    文件中。
  • 包恢复后执行脚本来复制文件。

关键考虑因素:

  • CI 集成: 确保所选方法与您的 CI 管道无缝集成。
  • 文件位置灵活性:选择允许控制相对位置的方法。
  • 条件复制:考虑基于环境变量或构建配置进行条件复制,以避免生产环境中不必要的文件操作。

其他提示:

  • 在复印任务中使用
    SkipUnchangedFiles="true"
    可最大程度地减少冗余副本。
  • 对测试数据文件和目录采用清晰一致的命名约定。
  • 考虑对大文件使用符号链接或目录连接以避免重复。
© www.soinside.com 2019 - 2024. All rights reserved.