.NET Standard 2.0类库引用ASP.NET Core NuGet包出现CS8032警告
问题描述
我有一个基于.NET Standard 2.0的类库项目,引用版本2.2.0的Microsoft.AspNetCore和Microsoft.AspNetCore.Mvc NuGet包后,出现5条CS8032警告,提示无法加载以下类型:
FixerWithFixAllAnalyzerDiagnosticAnalyzerFieldsAnalyzerDiagnosticDescriptorCreationAnalyzerCSharpRegisterActionAnalyzerReportDiagnosticAnalyzer
警告示例
Warning CS8032 An instance of analyzer Microsoft.CodeAnalysis.CSharp.Analyzers.MetaAnalyzers.CSharpReportDiagnosticAnalyzer cannot be created from C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.codeanalysis.analyzers\\1.1.0\\analyzers\\dotnet\\cs\\Microsoft.CodeAnalysis.CSharp.Analyzers.dll: Could not load type 'Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers.ReportDiagnosticAnalyzer`4' from assembly 'Microsoft.CodeAnalysis.Analyzers, Version=3.3.3.10305, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.. MyLib (netstandard2.0) C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.codeanalysis.analyzers\\1.1.0\\analyzers\\dotnet\\cs\\Microsoft.CodeAnalysis.CSharp.Analyzers.dll 1 Active System.TypeLoadException: Could not load type 'Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers.ReportDiagnosticAnalyzer`4' from assembly 'Microsoft.CodeAnalysis.Analyzers, Version=3.3.3.10305, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. at System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type) at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase) at Microsoft.CodeAnalysis.Diagnostics.AnalyzerFileReference.Extensions`1.GetAnalyzersForTypeNames(Assembly analyzerAssembly, IEnumerable`1 analyzerTypeNames, Boolean& reportedError) Severity Code Description Project File Line Suppression State Detail Description Warning CS8032 An instance of analyzer Microsoft.CodeAnalysis.CSharp.Analyzers.MetaAnalyzers.CSharpRegisterActionAnalyzer cannot be created from C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.codeanalysis.analyzers\\1.1.0\\analyzers\\dotnet\\cs\\Microsoft.CodeAnalysis.CSharp.Analyzers.dll: Method 'GetCodeBlockAnalyzer' in type 'Microsoft.CodeAnalysis.CSharp.Analyzers.MetaAnalyzers.CSharpRegisterActionAnalyzer' from assembly 'Microsoft.CodeAnalysis.CSharp.Analyzers, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' does not have an implementation.. MyLib (netstandard2.0) C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.codeanalysis.analyzers\\1.1.0\\analyzers\\dotnet\\cs\\Microsoft.CodeAnalysis.CSharp.Analyzers.dll 1 Active System.TypeLoadException: Method 'GetCodeBlockAnalyzer' in type 'Microsoft.CodeAnalysis.CSharp.Analyzers.MetaAnalyzers.CSharpRegisterActionAnalyzer' from assembly 'Microsoft.CodeAnalysis.CSharp.Analyzers, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' does not have an implementation. at System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type) at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase) at Microsoft.CodeAnalysis.Diagnostics.AnalyzerFileReference.Extensions`1.GetAnalyzersForTypeNames(Assembly analyzerAssembly, IEnumerable`1 analyzerTypeNames, Boolean& reportedError)
环境与已尝试操作
- 使用VS2022 17.4.4版本
- 已尝试删除所有bin/obj文件夹并重启VS,问题依旧
排查更新
清空项目所有文件,仅保留项目文件中以下配置:
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"> <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" /> </ItemGroup>
移除这些NuGet引用后警告消失,但引用时还会出现.NET Standard 2.0下的MVC相关警告(提示ASP.NET Core 2.2已终止支持)
解决方法
方法1:禁用冲突的代码分析器
CS8032警告来自旧版本的Microsoft.CodeAnalysis.Analyzers(1.1.0)与项目依赖的新版本分析器组件不兼容。可以在项目文件中添加配置排除该旧分析器:
<ItemGroup> <Analyzer Remove="Microsoft.CodeAnalysis.Analyzers" Version="1.1.0" /> </ItemGroup>
或者彻底禁用默认分析器,仅保留项目需要的组件:
<PropertyGroup> <EnableDefaultAnalyzers>false</EnableDefaultAnalyzers> </PropertyGroup>
方法2:升级NuGet包版本(推荐)
.NET Standard 2.0兼容更高版本的ASP.NET Core包,建议将Microsoft.AspNetCore和Microsoft.AspNetCore.Mvc升级到2.2.x的最新补丁版本(2.2.8),或者直接升级到兼容.NET Standard 2.0的更高主版本(如3.1.x),既能解决组件版本冲突问题,也能避免终止支持的警告。
方法3:全局抑制CS8032警告
如果暂时无法升级或修改分析器配置,可以在项目文件中添加全局抑制规则:
<PropertyGroup> <NoWarn>$(NoWarn);CS8032</NoWarn> </PropertyGroup>
内容的提问来源于stack exchange,提问作者buga
相关产品推荐
相关产品推荐

