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

如何避免C#源生成器项目被打包并上传到NuGet?

问题原因

默认配置下源生成器项目属于可打包项目,且主类库对它的项目引用会被识别为可传递依赖,执行打包操作时要么会将源生成器项目生成独立的nupkg文件,要么会将其标记为主类库包的依赖项,导致被一同上传到NuGet。

解决方法

只需修改两处配置即可解决:

1. 禁止源生成器项目生成NuGet包

在源生成器项目的.csproj文件的PropertyGroup节点中添加<IsPackable>false</IsPackable>配置,从根源避免该项目被打包为独立NuGet包。
修改后的源生成器项目配置示例:

<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
      <TargetFramework>netstandard2.0</TargetFramework>
      <LangVersion>9.0</LangVersion>
      <!-- 新增以下配置 -->
      <IsPackable>false</IsPackable>
   </PropertyGroup>

   <ItemGroup>
      <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.8.0"/>
      <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2">
         <PrivateAssets>all</PrivateAssets>
         <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      </PackageReference>
   </ItemGroup>
</Project>

2. 标记源生成器引用为私有依赖

在主类库的.csproj文件中,找到对源生成器项目的ProjectReference节点,添加PrivateAssets="all"属性,告知NuGet该依赖仅用于主项目构建,不会作为主包的公开依赖传递,避免关联拉取独立的源生成器包。
修改后的主类库引用配置示例:

<ItemGroup>
   <ProjectReference
      Include="..\MyLib.SourceGenerators\MyLib.SourceGenerators.csproj"
      OutputItemType="Analyzer"
      ReferenceOutputAssembly="false"
      <!-- 新增以下配置 -->
      PrivateAssets="all"/>
</ItemGroup>

以上配置不会影响源生成器的正常功能,也不会阻止源生成器的dll被嵌入到主类库的NuGet包中随主包分发,符合常规源生成器类库的打包逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:00:03