解决VS2022中.NET6项目编译器分析器版本冲突CS9057错误
打开Microsoft Visual Studio Community 2022 (64-bit) Version 17.6.5中的.NET6项目时,无法正常运行,出现以下错误:
CS9057 分析器程序集'C:\Program Files\dotnet\sdk\8.0.100-preview.6.23330.14\Sdks\Microsoft.NET.Sdk.Razor\source-generators\Microsoft.NET.Sdk.Razor.SourceGenerators.dll'引用的编译器版本'4.7.0.0'比当前运行的版本'4.6.0.0'新。
项目文件配置如下:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="6.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="6.0.16" /> <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.16" /> <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.16" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="6.0.20" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.16" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.16" /> <PackageReference Include="MudBlazor" Version="6.2.3" /> </ItemGroup> </Project>
近期安装了包含.NET 8 SDK的Microsoft Visual Studio Community 2022 (64-bit) Version 17.7.0 Preview 3.0,推测这是引发分析器引用冲突的原因。已尝试清理项目、删除obj和bin文件夹、删除vs文件夹,但问题仍未解决。
本地已安装的SDK列表:
3.0.103 [C:\Program Files\dotnet\sdk] 3.1.426 [C:\Program Files\dotnet\sdk] 7.0.306 [C:\Program Files\dotnet\sdk] 7.0.400-preview.23330.10 [C:\Program Files\dotnet\sdk] 8.0.100-preview.6.23330.14 [C:\Program Files\dotnet\sdk]
当前默认SDK版本:
8.0.100-preview.6.23330.14
需求:将分析器引用改回.NET6版本,或提供最佳解决方法。
1. 为项目指定兼容的SDK版本
在项目根目录创建global.json文件,强制项目使用.NET6兼容的稳定版SDK(比如7.0.306),避免调用.NET8的分析器:
{ "sdk": { "version": "7.0.306", "rollForward": "latestMinor" } }
添加后重新加载项目,VS会自动使用指定的SDK构建。
2. 更新Visual Studio版本
将VS 2022 17.6.5升级到17.7正式版(或更高稳定版),新版本的编译器版本会匹配.NET8 SDK的分析器要求;也可以直接使用已安装的VS 17.7 Preview 3.0打开该项目,其内置编译器支持.NET8分析器。
3. 禁用冲突的Razor分析器
在项目文件中添加配置,排除.NET8版本的冲突分析器:
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'"> <Analyzer Remove="@(Analyzer)" Condition="%(Analyzer.FullPath.Contains('8.0.100-preview'))" /> </ItemGroup>
4. 调整全局默认SDK版本
通过命令将全局默认SDK切换到稳定版:
dotnet new globaljson --sdk-version 7.0.306 --force
该操作会在用户目录生成global.json,所有未指定SDK版本的项目都会使用该版本。
内容的提问来源于stack exchange,提问作者Tyson Gibby

