使用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
相关产品推荐
相关产品推荐

