我可以在定义它的解决方案中使用 roslyn 分析器吗?

Can I use a roslyn analyzer from within the solution it is defined in?

据我了解,有两种分发和使用 roslyn 分析器的方法:-

  1. 作为 Visual Studio 插件
  2. 作为 Nuget 包

我经常发现自己想要执行某些特定于域的限制,以及方便的代码修复。 (例如,"We need Entity Framework lazy-loading, and so every navigation property in the WidgetFrobber.EntityFrameworkEntities namespace should be virtual.")

如果我的团队中有人不小心写了 public ICollection<Widget> 而不是 public virtual ICollection<Widget>,那么编写一个构建失败的小型分析器是微不足道的,但由于这个假设的分析器不打算在我之外共享团队(或者,事实上,在它定义的 .sln 之外)我宁愿在更新分析器时不分发插件或更新 nuget 包。

是否可以在定义它的 .sln 中引用 Roslyn 分析器,就像我可以引用另一个项目一样?

您可以点击添加分析器,然后添加项目构建的DLL。

您可能想要添加 Release 版本(除非您必须是 Release 才能构建 Debug)。

我就是这样完成的。将以下代码添加到您希望分析器分析的 .csproj。这似乎适用于新的 SDK 样式的 .csproj 和旧版本。

<ProjectReference Include="..\Path\To\Your\Analyzer\Analyzer.csproj"
    PrivateAssets="all"
    ReferenceOutputAssembly="false"
    OutputItemType="Analyzer"
/>

感谢此博客 post:https://www.meziantou.net/referencing-an-analyzer-from-a-project.htm