You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Standard 2.0 NuGet包中包含额外运行时文件?

问题分析与解决方案

当前方案存在多处错误,导致文件无法正确复制到消费者输出目录:

  • 原生DLL打包路径错误:你将x86/x64的DLL放到runtimes/win-x86/native,这是NuGet自动部署原生依赖的路径,不会按你期望的Special/x86/Special/x64结构存放,反而破坏了目标文件夹层级。
  • 自定义targets未被打包:你没有配置将手写的.targets文件打包到NuGet的buildTransitive目录,消费者项目根本不会加载这个文件,CopySpecialFiles任务从未执行。
  • 复制任务未保留目录结构:原Copy任务把所有文件直接放到$(OutDir)\Special下,会丢失x86/x64的子目录,无法还原原文件夹结构。
  • 文件打包不完整:x86/x64的DLL未被打包到buildTransitive/Special目录,targets文件找不到这些文件进行复制。

正确实现步骤

1. 调整类库项目的.csproj配置

将所有Special文件夹内容统一打包到buildTransitive/Special,同时确保自定义targets文件被打包到buildTransitive目录:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageId>Package.A</PackageId>
    <!-- 补充你的NuGet包版本、作者等属性 -->
  </PropertyGroup>

  <!-- 打包Special文件夹下所有内容到buildTransitive/Special -->
  <ItemGroup>
    <None Include="Special\**" Pack="true" PackagePath="buildTransitive/Special" />
  </ItemGroup>

  <!-- 打包自定义targets文件到buildTransitive目录 -->
  <ItemGroup>
    <None Include="Package.A.targets" Pack="true" PackagePath="buildTransitive" />
  </ItemGroup>
</Project>

2. 修正自定义.targets文件(命名为Package.A.targets)

调整文件匹配规则,确保复制时保留原目录结构,并选择更合适的执行时机:

<Project>
  <!-- 匹配buildTransitive/Special下的所有文件 -->
  <ItemGroup>
    <SpecialFiles Include="$(MSBuildThisFileDirectory)Special\**" />
  </ItemGroup>

  <!-- 复制文件到输出目录,完整保留原目录结构 -->
  <Target Name="CopySpecialFiles" AfterTargets="CopyFilesToOutputDirectory">
    <Copy 
      SourceFiles="@(SpecialFiles)"
      DestinationFiles="$(OutDir)\%(SpecialFiles.RecursiveDir)%(SpecialFiles.FileName)%(SpecialFiles.Extension)"
      SkipUnchangedFiles="true"
    />
  </Target>
</Project>

3. 重新打包并测试

  1. 删除项目的bin、obj目录,清理本地NuGet缓存。
  2. 执行打包命令:dotnet pack,生成新的Package.A.nupkg。
  3. 在消费者项目中引用新包并构建,输出目录将出现完整的Special文件夹及其所有子文件、子目录。

内容的提问来源于stack exchange,提问作者pfinferno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:33:13