【问题标题】:Can I use a roslyn analyzer from within the solution it is defined in?我可以在定义的解决方案中使用 roslyn 分析器吗?
【发布时间】:2016-07-27 15:01:55
【问题描述】:

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

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

我经常发现自己想要强制执行某些特定于域的限制,以及方便的代码修复。 (例如,“我们需要实体框架延迟加载,因此 WidgetFrobber.EntityFrameworkEntities 命名空间中的每个导航属性都应该是虚拟的。”)

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

  • References -> Add Reference -> Project 让我引用分析器的类型,但实际上并未将其添加为分析器。

  • References -> Analyzers -> Add Analyzer -> Browse... 需要 .dll 而不是项目引用。

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

【问题讨论】:

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


    【解决方案1】:

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

    您可能希望添加 Release 构建(除非您必须先成为 Release,然后才能构建 Debug)。

    【讨论】:

    • 啊!大概如果我设置解决方案配置以便调试配置构建分析器的发布配置,并设置项目依赖项以便首先构建分析器,那应该可以解决吗?
    • @IainGalloway:是的。或者,您可以编辑 csproj 以使用引用 DLL 路径中的当前配置(尽管 VS 可能会在保存时覆盖该配置)。
    • 我在 VS2017 中尝试过这种方法,但我总是收到编译器警告 CS8034: Unable to load Analyzer assembly xxxxxxx.dll : Could not load file or assembly 'file:///xxxxxxx.dll' 或它的依赖项之一。试图加载格式不正确的程序。该文件没有丢失并且格式正确(可以正常使用 ILSpy 打开)。其他人有同样的问题吗?
    • @Zvonko:将分析器更改为任何 CPU。
    • @SLaks 但是如何在解决方案级别添加分析器 dll?如果我在另一个解决方案中有100个项目,是否需要一个一个添加?
    【解决方案2】:

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

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

    感谢这篇博文:https://www.meziantou.net/referencing-an-analyzer-from-a-project.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2011-07-09
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多