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

dotnet pack打包NuGet包未包含项目引用代码如何解决

问题根因

默认dotnet pack流程处理ProjectReference时,会将被引用的项目作为独立NuGet依赖写入最终包的依赖清单,不会把被引用项目的编译输出DLL打包进当前项目的nupkg文件中。
你的场景中,自定义fork的Hypermedia分支没有发布到公共NuGet源,所以安装你SDK包的项目会自动拉取官方公开版本的Hypermedia包,公开版本不存在你补丁里新增的RenameFieldUsingJsonPropertyName方法,最终触发运行时MissingMethodException。

解决方案

不需要单独发布fork的子项目包,直接修改SDK项目的csproj配置,即可将项目引用的代码输出打包进最终nupkg:

  1. 首先在csproj的全局PropertyGroup节点下添加构建目标配置,让打包流程主动将指定的项目引用输出复制到包内:
<PropertyGroup>
  <!-- 保留你原有的配置,比如TargetFramework、PackageId、Version等 -->
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
  1. 修改所有需要内嵌到包内的ProjectReference节点,添加属性标记为私有引用,避免打包时将其识别为外部NuGet依赖:
<ItemGroup>
  <ProjectReference Include="..\..\..\vendor\Hypermedia\Src\Hypermedia.JsonApi.Client\Hypermedia.JsonApi.Client.csproj">
    <PrivateAssets>all</PrivateAssets>
    <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
  </ProjectReference>
  <ProjectReference Include="..\..\..\vendor\Hypermedia\Src\Hypermedia\Hypermedia.csproj">
    <PrivateAssets>all</PrivateAssets>
    <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
  </ProjectReference>
</ItemGroup>
验证方式

重新执行dotnet pack命令生成新的nupkg包后,可将文件后缀改为.zip解压,查看lib/[你的目标框架版本]目录下是否同时包含SDK自身DLL、以及两个Hypermedia相关的DLL,存在即说明配置生效。

注意:如果fork的Hypermedia项目本身依赖其他NuGet包,这些包会自动作为你SDK包的传递依赖被引入,不需要额外手动配置。你之前查到的旧回答提到的参数是传统.NET Framework下nuget.exe打包流程的配置,在SDK风格项目的dotnet pack流程中已被上述MSBuild配置替代,所以无法直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:39:29