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

如何调试Source Generator并正确使用NuGet包?

Source Generator引入Newtonsoft.Json后构建报错的解决方案

问题核心

你的Source Generator作为Roslyn组件,在构建Test项目时,Roslyn加载生成器程序集无法找到Newtonsoft.Json依赖。虽然打包时已将该DLL放入analyzers目录,但直接引用Generator项目构建时,依赖未被正确复制到生成器输出目录;同时NuGet包的依赖声明或打包方式存在缺失。

具体修复配置

1. 确保构建时将依赖复制到生成器输出目录

在Generator项目的.csproj中添加自定义目标,将Newtonsoft.Json.dll复制到输出目录,这样Test项目直接引用Generator项目时,Roslyn能找到依赖:

<Target Name="CopyDependencyToOutput" AfterTargets="Build">
    <Copy 
        SourceFiles="$(PkgNewtonsoft_Json)\lib\netstandard2.0\Newtonsoft.Json.dll" 
        DestinationFolder="$(OutputPath)"
        SkipUnchangedFiles="true" />
</Target>

2. 调整NuGet打包的依赖项声明

将原本的<None>项替换为<AnalyzerDependency>,明确告诉Roslyn该DLL是生成器的依赖组件,打包和加载时会被正确识别:

<ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" PrivateAssets="all" GeneratePathProperty="true" />
    <None Include="$(OutputPath)\$(AssemblyName).dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
    <!-- 替换原None项为AnalyzerDependency -->
    <AnalyzerDependency Include="$(PkgNewtonsoft_Json)\lib\netstandard2.0\Newtonsoft.Json.dll" Pack="true" PackagePath="analyzers/dotnet/cs" />
</ItemGroup>

3. 补充NuGet包的依赖元数据(可选)

如果希望其他项目安装你的NuGet包时自动依赖Newtonsoft.Json,可以修改PrivateAssets配置,让NuGet自动在包的依赖中添加该组件:

<PackageReference Include="Newtonsoft.Json" Version="13.0.1" PrivateAssets="analyzers;build" GeneratePathProperty="true" />

注:若已将Newtonsoft.Json打包到analyzers目录,此步骤可省略,避免重复依赖。

验证步骤

  1. 清理Generator项目和Test项目的构建输出目录
  2. 重新构建Generator项目,检查输出目录是否包含Newtonsoft.Json.dll
  3. 构建Test项目,确认不再出现找不到程序集的错误
  4. 打包Generator项目,安装到Test项目中测试,确保依赖正常加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:25:19