我可以在定义它的解决方案中使用 roslyn 分析器吗?
Can I use a roslyn analyzer from within the solution it is defined in?
据我了解,有两种分发和使用 roslyn 分析器的方法:-
- 作为 Visual Studio 插件
- 作为 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 包。
References -> Add Reference -> Project
让我引用分析器的类型,但实际上并没有将其添加为分析器。
References -> Analyzers -> Add Analyzer -> Browse...
需要 .dll 而不是项目引用。
是否可以在定义它的 .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
据我了解,有两种分发和使用 roslyn 分析器的方法:-
- 作为 Visual Studio 插件
- 作为 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 包。
References -> Add Reference -> Project
让我引用分析器的类型,但实际上并没有将其添加为分析器。References -> Analyzers -> Add Analyzer -> Browse...
需要 .dll 而不是项目引用。
是否可以在定义它的 .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