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

如何配置并发布采用ProjectReference的依赖自有包的NuGet包

独立NuGet包(主包+模型包)的配置与发布方案

1. 项目引用配置(核心实现)

和微软的Microsoft.Extensions.Hosting系列逻辑一致,在同一解决方案内用ProjectReference关联主项目(Foo)与模型项目(Foo.Models),同时通过配置避免模型代码被嵌入主包:
在Foo项目的.csproj中添加:

<ItemGroup>
  <ProjectReference Include="..\Foo.Models\Foo.Models.csproj" PrivateAssets="All" />
</ItemGroup>

PrivateAssets="All"的作用是:开发阶段直接引用模型项目源码方便调试,但发布NuGet包时,会自动将该项目引用转换为对Foo.Models NuGet包的依赖,而非把模型代码打包进Foo的包中。

2. 单个NuGet包的元数据配置

分别为两个项目配置独立的NuGet元数据,确保各自生成独立包:

Foo.Models项目的.csproj配置

<PropertyGroup>
  <PackageId>Foo.Models</PackageId>
  <Version>1.0.0</Version>
  <Authors>你的名称/团队</Authors>
  <Description>Foo库的独立模型类型包</Description>
  <PackageTags>foo;models</PackageTags>
  <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>

Foo项目的.csproj配置

<PropertyGroup>
  <PackageId>Foo</PackageId>
  <Version>1.0.0</Version>
  <Authors>你的名称/团队</Authors>
  <Description>Foo库核心功能包</Description>
  <PackageTags>foo;core</PackageTags>
  <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>

启用GeneratePackageOnBuild后,编译时会自动在输出目录生成对应的NuGet包。

3. 发布流程

  • 优先发布Foo.Models包到目标NuGet源(本地源或公共源),确保版本稳定。
  • 再发布Foo包,此时Foo的NuGet包会自动包含对同版本Foo.Models的依赖声明。客户端安装Foo时会自动拉取Foo.Models,但也可以单独安装Foo.Models,完全不依赖Foo的其他依赖。

4. 微软实现的核心细节

微软在Microsoft.Extensions.Hosting.Abstractions与Microsoft.Extensions.Hosting中的做法完全匹配上述逻辑:

  • 抽象/模型项目(Abstractions)仅包含无依赖的接口、模型类,独立成包。
  • 主项目(Hosting)用ProjectReference引用Abstractions,且设置PrivateAssets="All",确保编译主包时只生成依赖声明,不嵌入抽象层代码。
  • CI/CD流程中严格按“抽象包先发布,主包后发布”的顺序执行,保证版本一致性,避免依赖缺失问题。

内容的提问来源于stack exchange,提问作者S. ten Brinke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:20:15