当引用 netstandard2.0 ASP.net Core nuget 包时出现警告

3

我有一个使用 .net standard 2.0 的 lib 项目。

我收到了 5 条警告,内容为无法加载以下类型: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 文件夹,并在重启后尝试。

更新: 为了隔离问题,我已经删除了项目中的所有文件。 在我的项目文件中,我有以下内容:

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">    
    <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />    
 </ItemGroup>

当我将其移除时,警告消失了,但当它们存在时,我也可以在.netstandard2.0下看到一些MVC警告,我附上了截图:enter image description here


你使用的 Visual Studio 版本是哪个? - Guru Stron
我正在使用 VS2022 17.4.4, 我相信这是最新版本。 - buga
很抱歉,如果没有提供更多信息(mre),我无法提供帮助。请检查项目中是否有一些“可疑”的软件包,但这基本上是我能建议的全部。 - Guru Stron
1
你是否考虑过从.netstandard迁移?同时尝试删除ASP.NET Core包并添加FrameworkReference - 参见此答案 - Guru Stron
@GuruStrong 是一个针对 netstandard2.0netcoreapp3.1 的库; 关于你的解决方案,我得到了这个错误信息:未识别 FrameworkReference 'Microsoft.AspNetCore' - buga
显示剩余4条评论
1个回答

0

没有额外的上下文,我无法回答关于这个问题:

我得到了5个警告,说找不到类型: FixerWithFixAllAnalyzer、DiagnosticAnalyzerFieldsAnalyzer、 DiagnosticDescriptorCreationAnalyzer、CSharpRegisterActionAnalyzer、 ReportDiagnosticAnalyzer

但是我可以回答第二部分。

在 Visual Studio 的解决方案资源管理器中 Project->Dependencies 下显示的分析器仅说明它们要分析哪些问题。换句话说,这些不是项目中的实际错误,而是正在被检查的问题。以 Microsoft.EnittyFrameworkCore.Analyzer 为例,它只分析一个问题 EF1001: Internal EF Core API usage. 您可以在官方 git repository 上看到该错误代码的定义。

因此,每个包含的分析器都会检查某些已定义的问题,这些问题会显示在 Visual Studio 的错误列表窗口中(通常在构建后或在 Project->Analyze and Code Cleanup->Run Code Analysis 后)。


在项目中没有任何代码的情况下,图像中显示的问题存在,我已经删除了所有文件;仅通过具有.NET Standard 2.0 ASP.net Core包就会出现这些错误。 - buga
@buga 或许你没有理解我的意思。那些问题(来自图片)实际上并不是问题。它们只是指示需要捕获和分析的问题。你唯一需要担心的问题在于“错误列表”中。 - theCuriousOne
@buga 你能添加一下警告和堆栈跟踪的截图吗(如果有的话)? - theCuriousOne
我已经更新了问题,请看 examples: 之后。 - buga
你尝试过清除 NuGet 缓存吗? - theCuriousOne
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接