从 StrawberryShake (GraphQL) 自动生成的代码出现歧义问题 (CS0121)

问题描述 投票:0回答:3

使用

StrawberryShake.CodeGeneration.CSharp.Analyzers
自动生成的代码时遇到歧义问题。第一次使用这个包,所以我可能做了一些愚蠢的事情。错误信息是

CS0121: The call is ambiguous between the following methods or properties ...

Image of error in visual studio CS0121

我尝试重新安装 nuget 软件包并重新安装该工具。

供参考,我的项目属性如下:

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

  <PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
  
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.0" PrivateAssets="all" />
    <PackageReference Include="Microsoft.Authentication.WebAssembly.Msal" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
    <PackageReference Include="Refit" Version="6.3.2" />
    <PackageReference Include="StrawberryShake.CodeGeneration.CSharp.Analyzers" Version="12.15.2" />
    <PackageReference Include="StrawberryShake.Transport.Http" Version="12.15.2" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Shared\GrafanaUtilities.Shared.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Generated\" />
  </ItemGroup>

  <ItemGroup>
    <GraphQLConfig Include="Queries\Queries.graphql" />
  </ItemGroup>
</Project>

更新: 我设法通过将生成的代码标记为在编译期间不执行任何操作来解决当前的错误(看起来好像代码被放置在某个临时目录以及项目中的“生成”文件夹中。)

如果有一种方法可以阻止临时文件,那就太好了。对于面临同样问题的其他人希望这会有所帮助。

c# visual-studio-2022 ambiguity .net-7.0 strawberryshake
3个回答
3
投票

我遇到了同样的问题,这很烦人,因为发生这种情况时 VSCode 无法为您提供 IntelliSense,并且生成的代码不是最具可读性。

事实上,我认为它不会生成比“生成”文件夹中的文件更多的文件,但该代码仅供我们查看。实际代码是即时生成的。

这是来自他们的入门指南:https://chillicream.com/docs/strawberryshake/get-started

编译项目后,您现在应该看到一个生成的目录。 生成的代码仅适用于 IDE,实际代码是 通过源生成器直接注入 roslyn

因此,删除“生成”文件夹中的代码应该是安全的,一切仍然有效。

您可以通过在

"emitGeneratedCode": false,
文件中设置
.graphqlrc.json
来完成此操作。

繁荣,那么 VSCode 不会抱怨重复定义,并且 IntelliSense 的工作方式就像 Charm 一样。


0
投票

这似乎已在 StrawberryShake v13 中得到修复,他们使用了不同的方法,现在可以使用预览版本。

我在 VS Code 和 Rider 中遇到了同样的问题,并且一直在使用注释掉解决方案,但升级后我不再需要这样做。


0
投票

我在 StrawberryShake 13.5.1 中仍然遇到这个问题。

我认为您还可以将生成的代码的“构建操作”设置为“无”。

© www.soinside.com 2019 - 2024. All rights reserved.