C#控制台项目用Strawberry Shake构建时遇JSON重复键错误求助
我在C# .NET 6控制台项目中遵循Strawberry Shake v13教程完成所有步骤后,执行dotnet build时构建失败,报错信息如下:
EXEC : error GQL: An item with the same key has already been added. Key: JSON [D:\HTH\GraphQL\StrawberryShake_Graphql_client\GraphqlStrawberry\GraphqlStrawberry\GraphqlStrawberry.csproj]
C:\Users\Faizan Khan.nuget\packages\strawberryshake.server\13.0.5\build\StrawberryShake.Server.targets(63,5): error MSB3073: The command "dotnet "C:\Users\Faizan Khan.nuget\packages\strawberryshake.server\13.0.5\build..\tools\net6\dotnet-graphql.dll" generate "D:\HTH\GraphQL\StrawberryShake_Graphql_client\GraphqlStrawberry\GraphqlStrawberry" -o "D:\HTH\GraphQL\StrawberryShake_Graphql_client\GraphqlStrawberry\GraphqlStrawberry\obj\Debug\net6.0\berry" -n GraphqlStrawberry -a md5 -t" exited with code 1. [D:\HTH\GraphQL\StrawberryShake_Graphql_client\GraphqlStrawberry\GraphqlStrawberry\GraphqlStrawberry.csproj]
构建失败。
重复报错:EXEC : error GQL: An item with the same key has already been added. Key: JSON [D:\HTH\GraphQL\StrawberryShake_Graphql_client\GraphqlStrawberry\GraphqlStrawberry\GraphqlStrawberry.csproj]
C:\Users\Faizan Khan.nuget\packages\strawberryshake.server\13.0.5\build\StrawberryShake.Server.targets(63,5): error MSB3073: The command "dotnet "C:\Users\Faizan Khan.nuget\packages\strawberryshake.server\13.0.5\build..\tools\net6\dotnet-graphql.dll" generate "D:\HTH\GraphQL\StrawberryShake_Graphql_client\GraphqlStrawberry\GraphqlStrawberry" -o "D:\HTH\GraphQL\StrawberryShake_Graphql_client\GraphqlStrawberry\GraphqlStrawberry\obj\Debug\net6.0\berry" -n GraphqlStrawberry -a md5 -t" exited with code 1. [D:\HTH\GraphQL\StrawberryShake_Graphql_client\GraphqlStrawberry\GraphqlStrawberry\GraphqlStrawberry.csproj]
0条警告,2条错误
我的操作步骤:
- 创建.NET 6控制台项目
- 执行
dotnet new tool-manifest - 执行
dotnet add Demo package StrawberryShake.Server - 执行
dotnet graphql init https://web.com/graphql/ -n ConferenceClient -p ./Demo - 在json文件中添加命名空间
- 编写查询语句
- 执行
dotnet build后触发上述错误
这个错误通常是Strawberry Shake生成器遇到重复的JSON类型配置、重复定义或导入导致的,可尝试以下方案:
1. 清理重建
- 删除项目目录下的
obj和bin文件夹 - 执行
dotnet clean命令 - 重新执行
dotnet build
2. 检查GraphQL配置文件
- 打开项目中的
.graphqlrc.json配置文件,排查是否存在重复的JSON类型定义、重复的导入语句或客户端配置 - 确保配置内的命名空间、客户端名称没有重复
3. 检查查询文件
- 查看编写的
.graphql查询文件,确认没有重复的片段定义、字段别名,或重复引用同一类型的情况 - 保证所有查询、突变、订阅的定义唯一
4. 更新Strawberry Shake版本
当前使用的13.0.5版本可能存在已知bug,尝试更新到最新稳定版:
dotnet add package StrawberryShake.Server --version <最新稳定版本号>
同时更新工具:
dotnet tool update StrawberryShake.Tools
5. 检查项目文件
- 打开
.csproj文件,确认没有重复添加Strawberry Shake相关的包引用或生成目标 - 确保
<PackageReference>中没有重复指向StrawberryShake.Server的条目
内容的提问来源于stack exchange,提问作者Muhammad Faizan Khan

