配置IncludeReferencedProjects后NuGet包仍缺失引用项目DLL?
问题原因及解决方案
你遇到的问题核心是对IncludeReferencedProjects属性的作用理解有误,以及NuGet打包默认行为的限制:
原因分析
IncludeReferencedProjects的实际作用:这个属性并非直接将引用项目的DLL打包进主包,而是当引用的项目**启用了GeneratePackageOnBuild(可生成独立NuGet包)**时,将其转换为主包的NuGet依赖项。你的ReferencedProject没有开启该配置,所以这个属性在这里不会生效。- NuGet打包的默认逻辑:默认情况下,NuGet只会打包主项目自身的输出文件,不会自动包含项目引用的DLL,除非你明确配置相关规则。
解决方案
根据你的需求,有两种常见处理方式:
方式1:将ReferencedProject的DLL直接嵌入TestNuGet包(无需独立发布依赖包)
修改TestNuGet.csproj的配置:
- 调整项目引用的私有资产属性,避免依赖传递:
<ItemGroup> <ProjectReference Include="..\ReferencedProject\ReferencedProject.csproj" PrivateAssets="all" /> </ItemGroup>
- 添加内容项,将引用项目的输出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的依赖管理逻辑:
- 在
ReferencedProject.csproj中启用打包功能:
<PropertyGroup> <!-- 保留原有属性,新增以下配置 --> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>
- 保持
TestNuGet.csproj中的IncludeReferencedProjects=true配置不变。 - 发布时,将
TestNuGet和ReferencedProject的NuGet包上传到同一个NuGet源,安装TestNuGet时会自动下载并引用ReferencedProject包。
验证方法
打包完成后,可通过NuGet Package Explorer打开TestNuGet.nupkg:
- 方式1:检查
lib/net9.0目录下是否存在ReferencedProject.dll - 方式2:查看包的依赖项列表,确认包含
ReferencedProject
内容的提问来源于stack exchange,提问作者IFrank
相关产品推荐
相关产品推荐

