我能在解决方案内使用Roslyn分析器吗?

7
据我所知,有两种方法可以分发和使用Roslyn分析器:
  1. 作为Visual Studio插件
  2. 作为Nuget包
我经常希望强制执行某些特定于领域的限制以及方便的代码修复。 (例如,“我们需要实体框架延迟加载,因此WidgetFrobber.EntityFrameworkEntities命名空间中的每个导航属性都应该是虚拟的。”)编写一个小型分析器来检查是否有人在我的团队中意外地编写了public ICollection<Widget>而不是public virtual ICollection<Widget>很容易,但由于这个假设的分析器不打算在我的团队之外共享(事实上,不打算在定义它的.sln之外共享),因此我宁愿在更新分析器时不分发插件或更新nuget包。
  • 引用 -> 添加引用 -> 项目允许我引用分析器的类型,但实际上并没有将其添加为分析器。

  • 引用 -> 分析器 -> 添加分析器 -> 浏览...需要一个.dll而不是一个项目引用。

是否可能像引用另一个项目一样,在定义它的.sln内引用Roslyn分析器?
2个回答

3

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

您可能想要添加“发布版本”(除非在此之前您必须先进行“发布”才能构建“调试”版本)。


啊!假设我设置解决方案配置,使得Debug配置构建分析器的Release配置,并设置项目依赖项以使分析器首先构建,那应该可以解决问题吧? - Iain Galloway
@IainGalloway:是的。或者,您可以编辑 csproj 以使用路径中当前配置的引用 DLL(尽管 VS 可能会在保存时覆盖它)。 - SLaks
1
我在VS2017中尝试了这种方法,但总是收到编译器警告CS8034:无法加载分析器程序集xxxxxxxx.dll:无法加载文件或程序集“file:///xxxxxxx.dll”或其某个依赖项。尝试加载格式不正确的程序。 该文件未丢失且格式正确(可以使用ILSpy正常打开)。还有其他人遇到过同样的问题吗? - Zvonko
1
@Zvonko:将分析器更改为 Any CPU。 - SLaks
@SLaks 但是我如何在解决方案级别上添加分析器dll?如果我有另一个解决方案中的100个项目,我需要逐个添加吗? - joe

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接