将 CodeFixProvider 添加到现有的 Nuget 包
Add CodeFixProvider to existing Nuget package
我正在尝试向现有项目添加 Roslyn 分析器和代码修复提供程序,ApiEndpoints.csproj
作为 nuget 包分发。
在新的 Visual Studio 实例中使用 nuget 包时,分析器显然可以正常工作,但相应的代码修复提供程序不会出现在代码修复列表中。 如何排除故障并让我的代码修复提供程序正确注册 Visual Studio?
我最初通过 Analyzer with Code Fix (.NET Standard) 项目模板在新项目中构建了 Analyzer & Code Fix Provider。当我将它捆绑到一个 nuget 包中,在本地部署并从一个新的 Studio 实例中使用它时,分析器工作并且代码修复提供程序推荐了一个解决方案:
ApiEndpoints.Analyzer.csproj
:
但是,当我将分析器和代码修复提供程序 class 移动到与其他 classes 捆绑在一起的主要 ApiEndpoints.csproj
时,似乎只有分析器注册了,只有抑制选项,我的代码修复提供程序不在列表中:
ApiEndpoints.csproj
:
到目前为止我尝试过的:
我可以将承载 Analyzer/Fix 提供程序的 Visual Studio 调试器附加到使用它的不同 Studio 实例。 Analzyer 中的断点被击中,但 Code Fix Provider 中没有断点。所以我认为我的代码修复提供程序中的异常不会阻止注册。
我在 ApiEndpints.csproj
和 ApiEndpoints.Analyzers.csproj
中逐行对齐 SuppressDependenciesWhenPacking
(true), GeneratePackageOnBuild
(true ), IncludeBuildOutput
(真)。这些更改没有帮助。
多次重新启动两个 Visual Studio 实例。当最初使用分析器使用 nuget 包时,我发现分析器直到 Visual Studio 重新启动后才显示。但是多次重启并没有修复代码修复提供程序
多次更改分析器的 DiagnosticId
并确保代码修复提供程序正在引用它。
从不同项目部署了相同的分析器 + CodeFixProvider(带有代码修复的分析器(.NET 标准) 与 Class 库)。在一个中工作但在另一个中不工作,这让我认为这不是代码修复提供程序的问题,而是某种 registration/plumbing code/config.
总结
如何排除故障并让我的代码修复提供程序正确注册 Visual Studio?
您不应该将库和 analyzers/fixers 打包在同一个程序集甚至同一个包中。
除了强制您的用户对 analyzers/fixers 及其依赖项采取 运行 时间依赖外,该工具不支持该用例。
您应该将它们打包到它们自己的包中,并让库包依赖于 analyzers/fixers 包。
我正在尝试向现有项目添加 Roslyn 分析器和代码修复提供程序,ApiEndpoints.csproj
作为 nuget 包分发。
在新的 Visual Studio 实例中使用 nuget 包时,分析器显然可以正常工作,但相应的代码修复提供程序不会出现在代码修复列表中。 如何排除故障并让我的代码修复提供程序正确注册 Visual Studio?
我最初通过 Analyzer with Code Fix (.NET Standard) 项目模板在新项目中构建了 Analyzer & Code Fix Provider。当我将它捆绑到一个 nuget 包中,在本地部署并从一个新的 Studio 实例中使用它时,分析器工作并且代码修复提供程序推荐了一个解决方案:
ApiEndpoints.Analyzer.csproj
:
但是,当我将分析器和代码修复提供程序 class 移动到与其他 classes 捆绑在一起的主要 ApiEndpoints.csproj
时,似乎只有分析器注册了,只有抑制选项,我的代码修复提供程序不在列表中:
ApiEndpoints.csproj
:
到目前为止我尝试过的:
我可以将承载 Analyzer/Fix 提供程序的 Visual Studio 调试器附加到使用它的不同 Studio 实例。 Analzyer 中的断点被击中,但 Code Fix Provider 中没有断点。所以我认为我的代码修复提供程序中的异常不会阻止注册。
我在
ApiEndpints.csproj
和ApiEndpoints.Analyzers.csproj
中逐行对齐SuppressDependenciesWhenPacking
(true),GeneratePackageOnBuild
(true ),IncludeBuildOutput
(真)。这些更改没有帮助。多次重新启动两个 Visual Studio 实例。当最初使用分析器使用 nuget 包时,我发现分析器直到 Visual Studio 重新启动后才显示。但是多次重启并没有修复代码修复提供程序
多次更改分析器的
DiagnosticId
并确保代码修复提供程序正在引用它。从不同项目部署了相同的分析器 + CodeFixProvider(带有代码修复的分析器(.NET 标准) 与 Class 库)。在一个中工作但在另一个中不工作,这让我认为这不是代码修复提供程序的问题,而是某种 registration/plumbing code/config.
总结
如何排除故障并让我的代码修复提供程序正确注册 Visual Studio?
您不应该将库和 analyzers/fixers 打包在同一个程序集甚至同一个包中。
除了强制您的用户对 analyzers/fixers 及其依赖项采取 运行 时间依赖外,该工具不支持该用例。
您应该将它们打包到它们自己的包中,并让库包依赖于 analyzers/fixers 包。