【问题标题】:How to raise Visual Studio errors (that break the build process) from a VS extension?如何从 VS 扩展中引发 Visual Studio 错误(破坏构建过程)?
【发布时间】:2020-03-14 02:21:00
【问题描述】:

我正在开发一个 Visual Studio 扩展,我需要在 VS 错误列表中向用户显示错误。我希望这些错误能够防止/破坏解决方案的构建/运行,例如 this. 我该如何实现这一点?

我尝试了两种方法,但它们都只显示错误,它们确实注意中断/防止构建解决方案:

  1. 调整ErrorList VSSDK Example project 以便引发错误而不是消息。 Errors are shown properly 但仍然可以建造。
  2. 使用ErrorListProvider,如here 所述。与 1 相同的问题。

我也看过一些使用Diagnostics,但您需要ReportDiagnostic,这似乎与代码分析器特别相关。

【问题讨论】:

  • 那么 .. 你想try 某事然后catch 例外吗?
  • 我很确定在我的扩展代码中抛出Exceptions 不会破坏使用我的扩展的用户的代码(即构建过程)。这意味着如果您的扩展之一损坏,您将永远无法运行您的解决方案。但是,是的,一般来说,我的扩展程序会检查一些条件(当然可以是try/catch),如果其中一个没有遵守,那么我的扩展程序应该会阻止用户构建,即,我必须在 VS 中显示错误错误列表,该错误应该会破坏构建管道。

标签: c# error-handling build-process visual-studio-extensions


【解决方案1】:

您真正需要的是构建错误。为此,您应该使用 Roslyn 技术。看到这个similar issue

错误列表中出现错误但无法中断构建的原因:

根据this similar issue 的说法,Nuget 的规则可以破坏 VS IDE 中的构建,而 VS 扩展的规则则不能。因此,如果需要,我们可以使用 nuget 中的 MSBuild 魔法来中断构建。

【讨论】:

  • 感谢您对其他主题的参考,我一定会进一步研究!有趣的是,对于方法 1.(使用 VSSDK 示例),错误确实是 Intellisense 错误。但是,对于方法 2,错误是 Build 错误。尽管如此,构建过程并没有中断。
  • 挺奇怪的,你看到编译后output window出现错误了吗?
  • 感谢您的参考,我发现从扩展中您无法破坏构建,因为扩展是特定于 IDE 的 (github.com/dotnet/roslyn/issues/6195)。我必须向项目添加一个 NuGet(其中包含一个引发错误的 MSBuildTask)才能破坏它。
  • 是的,就像this document 的构建错误部分中描述的那样。明天将用这个细节更新答案:)
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2014-09-02
相关资源
最近更新 更多