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

如何将.NET 7 Proxy项目打包为包含依赖的单NuGet包?

如何将Proxy项目及依赖项打包为单个NuGet包

针对你的需求,完全可以把Proxy(Project 2)、API contracts(Project 3)和Infrastructure(Project 1)的必要代码打包成单个NuGet包,不用拆分多个独立包,下面是几种可行方案:

方案1:用ILRepack合并程序集

这是最直接的方式,打包时把依赖的程序集合并到Proxy的程序集里:

  • 给Proxy项目安装ILRepack.Lib.MSBuild.Task NuGet包
  • 编辑Proxy项目的.csproj文件,添加以下配置(放在<Project>节点内):
<Target Name="ILRepack" AfterTargets="Build">
  <ILRepack
      OutputType="Library"
      MainAssembly="$(OutputPath)$(AssemblyName).dll"
      OutputAssembly="$(OutputPath)$(AssemblyName).dll"
      InputAssemblies="$(OutputPath)xxx.Infrastructure.dll;$(OutputPath)xxx.APIContracts.dll;$(OutputPath)$(AssemblyName).dll"
      DebugInfo="true"
      CopyAttributes="true"
      AllowDuplicateResources="true"
  />
</Target>
  • 打包NuGet包时,生成的程序集已经是合并后的,其他应用引用这个包就不会再依赖额外的程序集。

注意:如果依赖项里有强命名的程序集,需要处理签名问题;另外如果依赖项还有其他外部NuGet依赖,这种方式只适合合并你自己的项目程序集。

方案2:把依赖项目的代码嵌入Proxy项目

如果你的Infrastructure和API contracts代码量不大,可以直接把代码嵌入Proxy项目:

  • 右键Proxy项目 → 添加 → 现有项,选择Infrastructure和API contracts里的所有代码文件,添加时选择「添加为链接」(避免复制代码冗余)
  • 确保这些链接文件的「生成操作」设置为「编译」
  • 这样打包Proxy项目时,这些依赖代码会直接编译到Proxy的程序集里,自然不会有外部依赖问题。

如果是.NET 5+,也可以用**共享项目(Shared Project)**重构:把Infrastructure和API contracts的代码移到共享项目,然后让Proxy项目引用这个共享项目,打包时共享项目的代码会直接编译进Proxy程序集。

方案3:通过NuGet配置嵌入依赖项

编辑Proxy项目的.csproj,调整对Infrastructure和API contracts的引用配置,让NuGet打包时把这些依赖的程序集包含进去:

  1. 确保Proxy项目对Infrastructure和API contracts的引用是ProjectReference,然后修改引用配置:
<ProjectReference Include="..\xxx.Infrastructure\xxx.Infrastructure.csproj">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</ProjectReference>
<ProjectReference Include="..\xxx.APIContracts\xxx.APIContracts.csproj">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</ProjectReference>
  1. 然后在.csproj里添加NuGet打包配置,确保依赖程序集被包含:
<PropertyGroup>
  <IncludeBuildOutput>true</IncludeBuildOutput>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
<ItemGroup>
  <None Include="$(OutputPath)xxx.Infrastructure.dll" Pack="true" PackagePath="lib\$(TargetFramework)" />
  <None Include="$(OutputPath)xxx.APIContracts.dll" Pack="true" PackagePath="lib\$(TargetFramework)" />
</ItemGroup>

这样打包出来的NuGet包会包含Proxy、Infrastructure和API contracts的程序集,其他应用安装后会自动把这些程序集复制到输出目录,不会报找不到依赖的错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:50:12