增量源生成器依赖System.Text.Json报错,求解决方法
问题描述
我的源生成器依赖System.Text.Json,但编译时出现报错:
生成器‘Generator’生成源失败,将无法参与输出,可能导致编译错误。异常类型为TypeInitializationException,消息为‘System.Text.Json.JsonSerializer的类型初始值设定项引发异常’,嵌套异常为System.IO.FileNotFoundException:无法加载文件或程序集‘System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51’,系统找不到指定文件。
项目为OpenAPIGenerator。
解决方法
安装对应版本的缺失NuGet包
System.Text.Json在.NET 8中依赖System.Text.Encodings.Web,直接在项目中安装8.0.0版本的包:dotnet add package System.Text.Encodings.Web --version 8.0.0也可以手动在项目文件(.csproj)中添加引用:
<PackageReference Include="System.Text.Encodings.Web" Version="8.0.0" />检查.NET版本兼容性
确保源生成器项目和目标项目都使用.NET 8(报错要求的是8.0.0.0版本程序集)。如果项目用的是更低版本.NET,要么升级到.NET 8,要么安装对应版本的System.Text.Encodings.Web包(比如.NET 7对应7.0.x版本)。清理重建项目
缓存异常可能导致依赖加载失败,执行以下命令清理并重建:dotnet clean dotnet restore dotnet build调整源生成器的依赖引用配置
对于源生成器项目,要确保依赖包是直接引用,可在项目文件中设置PrivateAssets属性,避免依赖传递到引用生成器的项目:<PackageReference Include="System.Text.Json" Version="8.0.0" /> <PackageReference Include="System.Text.Encodings.Web" Version="8.0.0" PrivateAssets="all" />重置NuGet缓存
如果NuGet缓存损坏,执行以下命令清除缓存后重新还原:dotnet nuget locals all --clear dotnet restore
内容的提问来源于stack exchange,提问作者Jan Tamis Kossen

