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

如何将引用项目打包进单个NuGet包,无需单独发布依赖包

解决NuGet包嵌入依赖项目无需单独发布的问题

你遇到的问题核心是:虽然手动把依赖项目的dll放进了NuGet包的lib目录,但原项目的ProjectReference会让NuGet自动生成依赖项声明,导致安装包时依然会去查找这些依赖的NuGet包。下面是两种可行的解决方法:

方法一:嵌入依赖项目的DLL并移除自动依赖声明

  1. 修改主项目(LookupListCache)的.csproj文件,对每个依赖项目的引用添加配置,阻止NuGet将其识别为外部依赖:
<ProjectReference Include="..\LookupListCache.Common\LookupListCache.Common.csproj">
  <PrivateAssets>all</PrivateAssets>
  <ExcludeAssets>runtime</ExcludeAssets>
</ProjectReference>
  • PrivateAssets="all"表示这些依赖项不会被传递到引用当前包的项目
  • ExcludeAssets="runtime"避免NuGet将依赖项的运行时文件作为外部依赖处理
  1. 接着在主项目的.csproj中添加打包规则,确保依赖项目的DLL被包含到NuGet包的lib目录:
<ItemGroup>
  <Content Include="$(OutputPath)\LookupListCache.Common.dll">
    <Pack>true</Pack>
    <PackagePath>lib\$(TargetFramework)</PackagePath>
  </Content>
  <!-- 另外两个依赖项目的DLL按照同样格式添加 -->
</ItemGroup>

方法二:直接合并依赖项目代码(更彻底)

如果依赖项目只是内部通用代码,不需要单独维护,可以直接把它们的代码合并到主NuGet包中:

  1. 同样先修改依赖项目的引用配置:
<ProjectReference Include="..\LookupListCache.Common\LookupListCache.Common.csproj">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>compile</IncludeAssets>
</ProjectReference>
  1. 在主项目的.csproj中添加打包配置,禁止自动生成依赖项声明:
<PropertyGroup>
  <IncludeBuildOutput>true</IncludeBuildOutput>
  <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>

这样打包时,NuGet会把依赖项目的编译内容合并到主包中,同时不会生成任何外部依赖声明。

验证打包结果

打包完成后,用NuGet包浏览器打开生成的.nupkg文件,确认两点:

  • lib目录下包含主项目和所有依赖项目的DLL
  • .nuspec文件中没有<dependencies>节点(或没有那些依赖项目的条目)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:22:37