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

配置IncludeReferencedProjects后NuGet包仍缺失引用项目DLL?

问题原因及解决方案

你遇到的问题核心是对IncludeReferencedProjects属性的作用理解有误,以及NuGet打包默认行为的限制:

原因分析

  1. IncludeReferencedProjects的实际作用:这个属性并非直接将引用项目的DLL打包进主包,而是当引用的项目**启用了GeneratePackageOnBuild(可生成独立NuGet包)**时,将其转换为主包的NuGet依赖项。你的ReferencedProject没有开启该配置,所以这个属性在这里不会生效。
  2. NuGet打包的默认逻辑:默认情况下,NuGet只会打包主项目自身的输出文件,不会自动包含项目引用的DLL,除非你明确配置相关规则。

解决方案

根据你的需求,有两种常见处理方式:

方式1:将ReferencedProject的DLL直接嵌入TestNuGet包(无需独立发布依赖包)

修改TestNuGet.csproj的配置:

  1. 调整项目引用的私有资产属性,避免依赖传递:
<ItemGroup>
    <ProjectReference Include="..\ReferencedProject\ReferencedProject.csproj" PrivateAssets="all" />
</ItemGroup>
  1. 添加内容项,将引用项目的输出DLL和pdb文件包含到NuGet包的lib目录:
<ItemGroup>
    <Content Include="$(OutputPath)ReferencedProject.dll">
        <Pack>true</Pack>
        <PackagePath>lib/net9.0</PackagePath>
    </Content>
    <Content Include="$(OutputPath)ReferencedProject.pdb" Condition="Exists('$(OutputPath)ReferencedProject.pdb')">
        <Pack>true</Pack>
        <PackagePath>lib/net9.0</PackagePath>
    </Content>
</ItemGroup>

方式2:将ReferencedProject作为独立NuGet依赖(推荐,符合NuGet规范)

这种方式更适合长期维护,遵循NuGet的依赖管理逻辑:

  1. 在ReferencedProject.csproj中启用打包功能:
<PropertyGroup>
    <!-- 保留原有属性,新增以下配置 -->
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
  1. 保持TestNuGet.csproj中的IncludeReferencedProjects=true配置不变。
  2. 发布时,将TestNuGet和ReferencedProject的NuGet包上传到同一个NuGet源,安装TestNuGet时会自动下载并引用ReferencedProject包。

验证方法

打包完成后,可通过NuGet Package Explorer打开TestNuGet.nupkg:

  • 方式1:检查lib/net9.0目录下是否存在ReferencedProject.dll
  • 方式2:查看包的依赖项列表,确认包含ReferencedProject

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:43:10