【问题标题】:Strategy for debugging C# analyzerC#分析器调试策略
【发布时间】:2022-09-29 23:05:09
【问题描述】:

我创建了自己的代码分析器

    [DiagnosticAnalyzer(LanguageNames.CSharp)]
    public class PluginAnalyzer : Microsoft.CodeAnalysis.Diagnostics.DiagnosticAnalyzer { ... }

在单元测试模式/错误/我正在寻找的过程中,它应该被报告。但是,当我在分析器中插入实际项目时,分析它没有被执行 - 或者至少没有报告错误(我在单元测试中使用来自这个项目的文件)。

例如。:

realproject.csproj

 <PackageReference Include=\"MyAnalyzer\" Version=\"1.0.0\">
   <PrivateAssets>all</PrivateAssets>
   <IncludeAssets>analyzers</IncludeAssets>
 </PackageReference>

我可以看到分析器正在执行(csc.exe /analyzer:..MyAnalyzer.dll),但没有报告错误。有没有办法调试分析器/分析它是否被触发或为什么它被忽略?

  • @RobertHarvey - 与 VSIX 相关 - 对我有用 - 我试图了解如何调试构建期间使用的分析器。

标签: c# roslyn


【解决方案1】:

它实际上非常简单:

  1. 找到分析仪包所在的文件;通常它像 c:\Users\[your user name]\.nuget\packages\[your package name]\[your package version]\analyzers\dotnet\cs\
  2. 在您的分析器项目中,将初始化方法替换为类似
    public override void Initialize(AnalysisContext context) {
      if (!Debugger.IsAttached) {
        Debugger.Launch();
      }
    }
    
    1. 构建并用修改后的 dll 替换 nuget 包 dll
    2. 触发代码分析的那一刻,它会要求您附加调试器

【讨论】:

    猜你喜欢
    • 2010-12-06
    • 2013-12-29
    • 2011-12-05
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多