【问题标题】:Add CodeFixProvider to existing Nuget package将 CodeFixProvider 添加到现有的 Nuget 包
【发布时间】:2020-07-19 20:59:55
【问题描述】:

我正在尝试将 Roslyn 分析器和代码修复提供程序添加到作为 nuget 包分发的现有项目 ApiEndpoints.csproj

在新的 Visual Studio 实例中使用 nuget 包时,Analyzer 显然在工作,但相应的 Code Fix Provider 未出现在 Code Fixes 列表中。 如何排除故障并让我的代码修复提供程序正确注册到 Visual Studio?

我最初通过 Analyzer with Code Fix (.NET Standard) 项目模板在一个新项目中构建了 Analyzer & Code Fix Provider。当我将它捆绑到一个 nuget 包中、在本地部署并从一个新的 Studio 实例中使用它时,分析器可以工作并且代码修复提供程序会推荐一个解决方案:

ApiEndpoints.Analyzer.csproj:

但是,当我将 Analyzer 和 Code Fix Provider 类移动到与其他类捆绑的主 ApiEndpoints.csproj 时,似乎只有 Analyzer 注册,只有 Suppress 选项,我的 Code Fix Provider 不在名单:

ApiEndpoints.csproj:

到目前为止我已经尝试过:

  1. 我可以将托管 Analyzer/Fix 提供程序的 Visual Studio 调试器附加到使用它的不同 Studio 实例。 Analzyer 中的断点被击中,但 Code Fix Provider 中没有。所以我认为我的代码修复提供程序中的异常不会阻止注册。

  2. 我在ApiEndpints.csprojApiEndpoints.Analyzers.csproj 中逐行查看并对齐SuppressDependenciesWhenPacking (true)、GeneratePackageOnBuild (true)、IncludeBuildOutput (true)。这些更改没有帮助。

  3. 多次重新启动两个 Visual Studio 实例。最初使用分析器使用 nuget 包时,我发现分析器在重新启动 Visual Studio 之前不会显示。但是多次重启并没有修复 Code Fix Provider

  4. 更改了分析器的DiagnosticId 几次,并确保代码修复提供程序正在引用它。

  5. 从不同的项目(Analyzer with Code Fix (.NET Standard) vs Class Library)部署了相同的 Analyzer + CodeFixProvider。一个工作,另一个工作,这让我认为这不是代码修复提供程序的问题,而是某种注册/管道代码/配置。

总结

如何排除故障并让我的代码修复提供程序正确注册到 Visual Studio?

【问题讨论】:

    标签: c# visual-studio roslyn roslyn-code-analysis


    【解决方案1】:

    您不应将库和分析器/修复程序打包在同一个程序集甚至同一个包中。

    除了强制您的用户对分析器/修复器及其依赖项进行运行时依赖之外,该工具不支持该用例。

    您应该将它们打包在自己的包中,并让库包依赖于分析器/修复器包。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 2019-11-22
      • 2019-10-24
      • 2014-09-03
      • 2022-01-12
      • 2017-08-10
      • 2016-05-12
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多