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

如何用dotnet pack将多个项目(含.csproj引用)打包为一个NuGet包并测试?

用dotnet pack打包多个项目到单个NuGet包的实现方案

核心思路

dotnet pack没有直接提供旧版nuget pack -IncludeReferencedProjects那样的参数,但可以通过修改主项目的.csproj配置,将引用的项目程序集、相关资源等一并打包到主项目的NuGet包中。

具体操作步骤

1. 调整本地项目引用配置

如果主项目通过<ProjectReference>引用其他本地项目,需在主项目的.csproj里为每个项目引用添加PrivateAssets="none",确保引用项目的输出会被纳入NuGet包:

<ItemGroup>
  <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" PrivateAssets="none" />
  <ProjectReference Include="..\ClassLibrary2\ClassLibrary2.csproj" PrivateAssets="none" />
</ItemGroup>

2. 配置NuGet包包含引用项目输出

在主项目.csproj的<PropertyGroup>节点下添加以下配置,强制打包时包含引用项目的程序集:

<PropertyGroup>
  <!-- 启用包含引用项目的输出 -->
  <IncludeReferencedProjects>true</IncludeReferencedProjects>
  <!-- 可选:打包引用项目的符号文件 -->
  <IncludeSymbols>true</IncludeSymbols>
</PropertyGroup>

3. 手动添加额外打包文件(可选)

如果需要将引用项目的非程序集文件(如资源文件、配置文件)也打包,可在主项目.csproj中添加<Content>节点:

<ItemGroup>
  <Content Include="..\ClassLibrary1\**\*.resx" Pack="true" PackagePath="lib\$(TargetFramework)" />
  <Content Include="..\ClassLibrary2\**\*.config" Pack="true" PackagePath="lib\$(TargetFramework)" />
</ItemGroup>

4. 执行打包命令

在主项目目录下运行以下命令,生成包含所有目标内容的NuGet包:

dotnet pack --configuration Release

注意事项

  • 若主项目引用的是第三方NuGet包(<PackageReference>),默认不会将这些包的程序集打包进你的NuGet包。如果确实需要打包第三方程序集,可通过<PackageReference>的PrivateAssets="all"配合<PackageCopyToOutput>true</PackageCopyToOutput>,再用<Content>将输出目录中的第三方程序集纳入包中,但这种做法可能引发依赖冲突,需谨慎使用。
  • 打包完成后,可通过NuGet包浏览器打开生成的.nupkg文件,验证是否包含了所有需要的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:55:04