【问题标题】:SpecFlow: Opening a feature file result in a NullReferenceExceptionSpecFlow:打开功能文件会导致 NullReferenceException
【发布时间】:2021-05-19 05:15:46
【问题描述】:

几周后,我突然在 Visual Studio 2019(专业版)中遇到了 SpecFlow 扩展问题。它突然停止工作。首先我认为是因为 VS 的更新,但我的其他同事正在使用相同(最新)版本的 VS,并且 SpecFlow 对他们有效。

我遇到的问题是:

  • SpecFlow 没有设置菜单(工具 - 选项 - SpecFlow)
  • 打开功能文件时出现 NullReferenceException(请参阅帖子末尾的活动日志条目)
  • 打开功能文件时没有语法高亮
  • 没有上下文菜单

测试资源管理器仍在发现测试,我仍然可以运行它们,但不能从功能文件中运行(也不能调试步骤)。

扩展程序已正确安装并启用(据我所知)。 已经尝试了以下方法但没有成功:

  • 卸载并安装 SpecFlow for Visual Studio 2019 扩展
  • 卸载 SpecFlow 并安装 Devroom
  • 卸载 Visual Studio 2019 并重新安装

你们中有人知道是什么原因造成的吗?

活动日志条目

<entry>
  <record>806</record>
  <time>2021/02/09 09:25:56.786</time>
  <type>Error</type>
  <source>Editor or Editor Extension</source>
  <description>System.NullReferenceException: Object reference not set to an instance of an object.&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.ProjectScopeFactory.&lt;.ctor&gt;b__9_0() in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\ProjectScopeFactory.cs:line 52&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.Implementation.Utils.SynchInitializedInstance`1.EnsureInitialized()&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.ProjectScopeFactory.&lt;.ctor&gt;b__9_2(Project project) in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\ProjectScopeFactory.cs:line 64&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.Implementation.Utils.SynchronizedResultCache`3.GetOrCreate(TSource source)&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.ProjectScopeFactory.GetProjectScope(Project project) in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\ProjectScopeFactory.cs:line 76&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.GherkinLanguageServiceFactory.CreateLanguageService(ITextBuffer textBuffer) in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\GherkinLanguageServiceFactory.cs:line 51&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.GherkinLanguageServiceFactory.&lt;&gt;c__DisplayClass7_0.&lt;GetLanguageService&gt;b__0() in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\GherkinLanguageServiceFactory.cs:line 43&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.GherkinBufferServiceManager.&lt;&gt;c__DisplayClass3_0`1.&lt;GetOrCreate&gt;b__0() in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\GherkinBufferServiceManager.cs:line 32&#x000D;&#x000A;
    at Microsoft.VisualStudio.Utilities.PropertyCollection.GetOrCreateSingletonProperty[T](Object key, Func`1 creator)&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.GherkinBufferServiceManager.GetOrCreate[TService](ITextBuffer textBuffer, Func`1 creator) in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\GherkinBufferServiceManager.cs:line 29&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.GherkinLanguageServiceFactory.GetLanguageService(ITextBuffer textBuffer) in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\GherkinLanguageServiceFactory.cs:line 43&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.GherkinFileEditor.GherkinFileClassifierProvider.&lt;&gt;c__DisplayClass3_0.&lt;GetClassifier&gt;b__0() in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\GherkinFileEditor\GherkinFileClassifierProvider.cs:line 31&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.GherkinBufferServiceManager.&lt;&gt;c__DisplayClass3_0`1.&lt;GetOrCreate&gt;b__0() in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\GherkinBufferServiceManager.cs:line 32&#x000D;&#x000A;
    at Microsoft.VisualStudio.Utilities.PropertyCollection.GetOrCreateSingletonProperty[T](Object key, Func`1 creator)&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.LanguageService.GherkinBufferServiceManager.GetOrCreate[TService](ITextBuffer textBuffer, Func`1 creator) in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\LanguageService\GherkinBufferServiceManager.cs:line 29&#x000D;&#x000A;
    at TechTalk.SpecFlow.VsIntegration.GherkinFileEditor.GherkinFileClassifierProvider.GetClassifier(ITextBuffer buffer) in D:\a\1\s\TechTalk.SpecFlow.VSIXShared\GherkinFileEditor\GherkinFileClassifierProvider.cs:line 30&#x000D;&#x000A;
    at Microsoft.VisualStudio.Text.Classification.Implementation.ClassifierTaggerProvider.&lt;&gt;c__DisplayClass12_0`1.&lt;CreateTagger&gt;b__0(IClassifierProvider provider)&#x000D;&#x000A;
    at Microsoft.VisualStudio.Text.Utilities.GuardedOperations.InvokeEligibleFactories[TExtensionInstance,TExtensionFactory,TMetadataView](IEnumerable`1 lazyFactories, Func`2 getter, IContentType dataContentType, IContentTypeRegistryService contentTypeRegistryService, Object errorSource)&#x000D;&#x000A;--- End of stack trace from previous location where exception was thrown ---&#x000D;&#x000A;
    at Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)
  </description>
</entry>

编辑: 运行 VS 修复后,我可以看到“清除 MEF 组件缓存”扩展的菜单选项。不幸的是,使用它并没有让我进一步使用 SpecFlow 扩展(仍然是同样的问题)。

【问题讨论】:

  • 我不知道删除C:/Users/%USERNAME%/AppData/*/Microsoft/Visual Studio/{Version}/ComponentModelCache/ 中的内容是否也能解决问题。
  • 删除此文件夹中的内容和安装 MEF 缓存清理器均无效。

标签: visual-studio-2019 specflow


【解决方案1】:

这看起来 Visual Studio 的 MEF 缓存有问题。
Mads Kristensen 的Clear MEF Component Cache 扩展是一种简单的清洁方法。可以在此处的市场上找到它:https://marketplace.visualstudio.com/items?itemName=MadsKristensen.ClearMEFComponentCache

安装并重启VS后,执行菜单中的命令:

之后,再次重启 VS,SpecFlow VS Extension 应该会再次工作。

【讨论】:

  • 感谢您的回复,但安装此扩展程序后,我没有得到这个额外的菜单条目。删除 ComponentModelCache 文件夹中的所有文件(如 Greg 建议的那样)也不起作用。
  • @EddieTerlouw:愚蠢的问题,但是在安装了扩展之后,你是否关闭了所有的 Visual Studio 窗口并重新打开了 Visual Studio?您是否已加载解决方案?
  • @Greg:是的,我关闭了所有 VS 实例,因为那是安装扩展的时候。再次启动 VS 后,没有添加任何菜单项来清除 MEF 组件缓存。
  • 从 VS 安装程序运行修复后,我可以看到 MEF 清洁器的菜单,但使用该菜单后,即使安装并启用了扩展程序,我仍然没有任何来自 SpecFlow 的内容。
【解决方案2】:

由于不同的问题,我在笔记本电脑上收到了来自 IT 部门的全新图像。因此,SpecFlow 的问题也得到了解决。我仍然不知道究竟是什么导致了这种情况,但我的猜测是注册表稍微损坏或类似的东西。

反正这个不用回答了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2016-06-25
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多