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

使用StrawberryShake生成代码时遭遇CS0121歧义错误求助

解决StrawberryShake代码生成CS0121歧义错误及阻止临时文件生成

问题说明

首次使用StrawberryShake.CodeGeneration.CSharp.Analyzers包时,自动生成的代码触发CS0121歧义错误,错误提示:

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

已尝试重装NuGet包及相关工具,目前通过标记生成代码不参与编译临时绕过错误,但发现生成代码同时出现在项目Generated文件夹和临时目录中,需要彻底解决重复生成的问题。

项目配置如下:

<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>

解决步骤

1. 强制指定代码生成输出目录

在项目的<PropertyGroup>节点中添加以下配置,让StrawberryShake只把代码生成到你指定的Generated文件夹,同时禁用临时目录生成:

<PropertyGroup>
  <!-- 保留原有配置 -->
  <GraphQLCodegenOutputPath>Generated</GraphQLCodegenOutputPath>
  <StrawberryShake_DisableTempGeneration>true</StrawberryShake_DisableTempGeneration>
</PropertyGroup>

2. 清理重复的编译引用

打开项目文件(.csproj),检查是否有引用临时目录下生成代码的条目(通常在文件底部,格式类似<Compile Include="obj\...\*.cs" />),直接删除这些条目。然后确保只包含Generated文件夹下的代码:

<ItemGroup>
  <Compile Include="Generated\**\*.cs" />
</ItemGroup>

3. 清理缓存并重建项目

  • 删除项目根目录下的obj和bin文件夹
  • 在Visual Studio中依次执行清理解决方案 → 重建解决方案
  • 或者用命令行执行:
dotnet clean
dotnet build

4. 验证版本兼容性

确认你使用的StrawberryShake 12.15.2版本与.NET 7.0兼容,如果后续仍有问题,可以尝试升级到最新的兼容版本。

问题根源

CS0121错误是因为同一套代码被重复生成到了两个不同的目录(项目Generated文件夹和临时目录),且这两个目录的代码都被纳入了编译范围,导致方法/属性定义冲突。通过指定唯一的输出目录并禁用临时生成,就能彻底消除歧义。

内容的提问来源于stack exchange,提问作者Jeff-GPE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:05:44