【问题标题】:VS2015 Diagnostic with Code Fix - NuGet OR VSIX OR both?带有代码修复的 VS2015 诊断 - NuGet 或 VSIX 或两者?
【发布时间】:2015-01-21 09:34:52
【问题描述】:

使用 .NET 编译器平台 SDK 模板时 (https://visualstudiogallery.msdn.microsoft.com/849f3ab1-05cf-4682-b4af-ef995e2aa1a5)

为了创建带有代码修复的 Roslyn 诊断程序,我得到了一个 NuGet 包和一个 VSIX - 如自述文件所述:

“构建此项目将生成一个分析器.dll,以及您可能希望打包该分析器的以下两种方式:

  • 一个 NuGet 包(.nupkg 文件),它将您的程序集添加为参与构建的项目本地分析器。

  • 一个 VSIX 扩展(.vsix 文件),它将您的分析器应用到所有项目并且只在 IDE 中工作。”

现在是以下场景:如果两者都安装了——NuGet 作为项目的一部分(例如,该项目的公司政策),VSIX 部分是开发人员本地安装的一部分(例如,她也获得了其他项目的分析器) .截至今天,上述场景的建议将显示 两次

我能否以某种方式告诉 VS2015 两者(NuGet/VSIX)实际上是相同的(并且只运行一次)?还是一种方法更适合部署(例如 NuGet)而另一种方法(VSIX)仅用于调试诊断(比 NuGet 更方便)?有这方面的官方指导吗?

(注意:我在 NR6Pack 上工作)

【问题讨论】:

    标签: c# .net roslyn visual-studio-2015


    【解决方案1】:

    我们最近根据分析器名称进行了统一更改。因此,在 VSIX 分析器和项目分析器都具有相同的 AssemblyName 的情况下,它只会运行一次,并且只会在错误列表中报告一次问题。此更改应该会在 VS2015 的下一次更新中出现(但遗憾的是,它没有进入最近发布的 VS 2015 CTP5)。

    将 NuGet 与 VSIX 视为部署机制选择:

    • 通过 NuGet 部署并将分析器附加到项目意味着分析器随项目一起移动到源代码控制,因此很容易为团队应用相同的规则。这也意味着命令行构建报告分析器报告的问题。
    • 部署为 VSIX 意味着 VS 中的每个项目以及这些问题都不会通过命令行构建产生。

    我认为大多数规则应该通过 NuGet 部署并在团队级别强制执行,但个人偏好的规则可能应该通过 VSIX 部署。

    【讨论】:

    • 如果两个 不同 NuGet/VSIX 具有相同名称的分析器会怎样?你是按属性(哪些)、类名还是什么组合?
    • 感谢您澄清这一点!
    • 除了来自不同供应商的同名分析器之外,版本控制的故事是什么?即VSIX 是v2.0 而NuGet 仍然是v1.4? (假设不同的分析器和错误修复/不同的行为)
    • @ChristophWille,我假设 Srivatsn 对 AssemblyName 的引用表示 AssemblyName class
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多