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

将多项目打包为单个NuGet包时遭遇NU1101错误的排查

问题根源

你的聚合项目中添加的<ProjectReference>会被NuGet自动解析为NuGet依赖项,写入最终包的.nuspec文件中。即使你手动将两个项目的DLL打包到MyGenerators包内,NuGet依然会尝试查找这两个不存在的独立包(MyProject.SourceGenerators和MyProject.SourceGenerators.Core),从而抛出NU1101错误。

解决方案

需要修改聚合项目的配置,阻止ProjectReference生成不必要的依赖项声明,并确保被引用项目的输出正确打包:

  1. 修改ProjectReference配置,阻止生成依赖项
    在每个<ProjectReference>节点中添加<IncludeAssets>none</IncludeAssets>,告诉NuGet不要将这些项目引用作为包依赖项处理:

    <ItemGroup>
      <ProjectReference Include="$(SrcPath)\MyProject.SourceGenerators\MyProject.SourceGenerators.csproj"
                        PrivateAssets="all"
                        IncludeAssets="none" />
      <ProjectReference Include="$(SrcPath)\MyProject.SourceGenerators.Core\MyProject.SourceGenerators.Core.csproj"
                        PrivateAssets="all"
                        IncludeAssets="none" />
    </ItemGroup>
    
  2. 确保被引用项目不单独打包
    在MyProject.SourceGenerators.csproj和MyProject.SourceGenerators.Core.csproj的<PropertyGroup>中添加:

    <IsPackable>false</IsPackable>
    

    避免这两个项目被单独生成NuGet包,同时不影响聚合项目引用它们的输出文件。

  3. 验证打包后的依赖项
    打包后可以用NuGet包浏览器打开MyGenerators.nupkg,检查.nuspec文件的<dependencies>节点,确认不再包含MyProject.SourceGenerators和MyProject.SourceGenerators.Core的依赖声明。

完整修改后的聚合项目配置
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>

    <IncludeBuildOutput>false</IncludeBuildOutput>
    <IsPackable>true</IsPackable>
    <NoWarn>$(NoWarn);NU5128</NoWarn>

    <PackageId>MyGenerators</PackageId>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="$(SrcPath)\MyProject.SourceGenerators\MyProject.SourceGenerators.csproj"
                      PrivateAssets="all"
                      IncludeAssets="none" />
    <ProjectReference Include="$(SrcPath)\MyProject.SourceGenerators.Core\MyProject.SourceGenerators.Core.csproj"
                      PrivateAssets="all"
                      IncludeAssets="none" />
  </ItemGroup>

  <ItemGroup>
    <None Include="$(OutputPath)\MyProject.SourceGenerators.dll"
          Pack="true" PackagePath="analyzers/dotnet/cs"
          Visible="false" />

    <None Include="$(OutputPath)\MyProject.SourceGenerators.Core.dll"
          Pack="true" PackagePath="lib/netstandard2.0" />
  </ItemGroup>

</Project>

这样修改后,重新执行dotnet pack,引用MyGenerators包时就不会再触发NU1101错误了——NuGet只会处理MyGenerators本身,不会再尝试查找那两个不存在的独立包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:32:21