【问题标题】:Getting warnings when having netstandard2.0 ASP.net Core nuget packages referenced引用 netstandard2.0 ASP.net Core nuget 包时收到警告
【发布时间】:2023-01-31 06:46:28
【问题描述】:

我有一个使用 .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 警告,我附上截图:

【问题讨论】:

  • 您使用的是哪个版本的 Visual Studio?
  • 我正在使用VS2022 17.4.4,我相信这是最新的
  • 您是否尝试过“常规” - 删除 bin 和 obj 文件夹,重新启动 VS,重新启动机器?
  • @GuruStron 我刚刚尝试了你刚才说的所有内容,重建后我收到了所有警告
  • 您是否考虑过从.netstandard 搬家?还可以尝试删除 ASP.NET Core 包并添加 FrameworkReference - 请参阅 this answer

标签: asp.net-core .net-core nuget visual-studio-2022


【解决方案1】:

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

我收到 5 条警告,表示无法加载类型: FixerWithFixAllAnalyzer, DiagnosticAnalyzerFieldsAnalyzer, DiagnosticDescriptorCreationAnalyzer, CSharpRegisterActionAnalyzer, 报告诊断分析器

但我可以回答第二部分。

在 Visual Studio 的解决方案资源管理器(您的屏幕截图)中的项目-> 依赖项下显示的分析器仅解释了它们分析的问题。换句话说,这些不是您项目中的实际错误,而是正在检查的问题。作为一个具体的例子,让我们以 Microsoft.EnittyFrameworkCore.Analyzer 为例,它只分析了一个问题 EF1001: Internal EF Core API usage. 您可以在官方 git repository 中看到该错误代码的定义。

因此,每个包含的分析器都会检查特定数量的问题,这些问题显示在 Visual Studio 的错误列表窗口中(通常在构建之后或在项目之后 -> 分析和代码清理 -> 运行代码分析

【讨论】:

  • 图像中显示的问题在项目中没有任何代码的情况下存在,我已经删除了所有文件;只需使用 .net 标准 2.0 ASP.net Core 包就会出现这些错误
  • @buga 也许你不明白我的意思。这些问题(来自图像)根本不是问题。这些仅表明要捕获和分析哪些问题。只有你应该担心的问题在“错误列表”中
  • 我认为它们可能与我收到的警告有关,
  • @buga 您可以添加警告和堆栈跟踪的屏幕截图(如果有的话)吗?
  • 我已经更新了问题,请参阅examples:之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2018-12-11
  • 2021-10-18
  • 2018-06-15
  • 2020-01-29
相关资源
最近更新 更多