【问题标题】:Visual Studio 2008 jQuery IntelliSense sporadically fails, restarting VS fixesVisual Studio 2008 jQuery IntelliSense 偶尔失败,重新启动 VS 修复
【发布时间】:2012-11-18 08:58:48
【问题描述】:

马上,这不是您的标准“我无法让 javascript IntelliSense 在 Visual Studio 中工作”。备案:

  • 我使用的是 Visual Studio 2008
  • 我已经安装了 SP 1
  • 我已经安装了 -vsdoc.js 文档文件的修补程序KB958502

我正在开发一套相互关联的 jQuery 插件,以打包为类库中的资源。所以在一个目录中,我有(例如):

  • jquery-vsdoc.js
  • core.js
  • plug1.js
  • plug2.js

在 core.js 中,我在文件顶部有以下内容:

/// <reference path="jquery-vsdoc.js" />

然后在每个plug#.js中,我都有:

/// <reference path="jquery-vsdoc.js" />
/// <reference path="core.js" />

IntelliSense 最初工作,甚至包括在插件中工作时来自 core.js 的添加。但是,有时最轻微的更改,甚至在引用 XML 标记中添加和删除空格,或按 Ctrl-Shift-J,都会导致可怕的“更新 JScript IntelliSense 时出错:由于错误而未生成客户端脚本 IntelliSense 信息在外部脚本参考中。”除了一秒钟前它还在使用那个外部脚本引用!

对于 jquery-vsdoc.js,我使用来自 http://jqueryjs.googlecode.com/files/jquery-1.3.2-vsdoc2.js 的 Comment Version 1.3.2b(文件中的内容)。我从文件中省略了版本号,以便在不可避免地更新时不必更改一堆引用。

那么可能是什么问题?事实证明,重新启动 Visual Studio 是一种非常不雅(且耗时)的解决方法。

【问题讨论】:

    标签: javascript visual-studio intellisense


    【解决方案1】:

    您是否尝试过增加 IntelliSense 超时?

    默认情况下,每个 IntelliSense 请求 只允许 15s 执行。这个 是为了防止 IntelliSense 无限循环的脚本。如果你 有一个大脚本或更慢的机器, 增加 超时限制。超时值 存储在以下注册表项中 (取决于您是否使用 快递或完整产品)。这 值以毫秒为单位,所以选择 大于 15000。

    HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\HTML 编辑器\JsFailsafeTimeout HKEY_CURRENT_USER\Software\Microsoft\VWDExpress\9.0\HTML 编辑器\JsFailsafeTimeout

    【讨论】:

    • 好建议!不幸的是(或幸运的是?)我没有大型脚本或慢速机器。失败是瞬间的,不需要15秒。
    【解决方案2】:

    关闭和打开文件是否会重置状态?

    打开任务管理器并观察进程。当您按下 Ctrl-Shift-J 时,您是否看到一个名为“typelibbuilder.exe”的进程启动?

    我试图想象什么样的问题可能需要重新启动 VS。每次按下 Ctrl-Shift-J 时,引用(与该消息相关)的处理都会在一个新的单独进程中完成(除非处理已被禁用,在这种情况下您会看到不同的消息)。几乎听起来 VS 和 typelibbuilder 或其他一些必要组件之间的通信失败了。

    在 SP1 中,您不需要直接引用“-vsdoc”文件。如果你引用“foo.js”并且旁边有一个“foo-vsdoc.js”文件,那么VS将使用vsdoc版本来生成智能感知。我怀疑这与您的问题有关。

    我知道这并不令人欣慰,但我们在 Visual Studio 2010 中大幅提高了 Javascript Intellisense 的性能和可靠性。Beta1 目前可供 MSDN 订阅者使用(尽管它是测试版,其中仍有一些错误) .

    如果您可以获得可靠的重现步骤,您还可以在http://connect.microsoft.com/ 提交错误报告。

    【讨论】:

      【解决方案3】:

      我不知道这是否会对你有所帮助,但我在 VS 2008 JS intellisense 中遇到了以下错误:

      当在外部文件中添加 jQuery 作为引用,然后我更新 JS 我得到:

      'XmlHttpRequest is undefined'就行了:

      return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
      

      似乎 JS 智能感知引擎实际上正在执行一些 jQuery 代码(很可能会检查它,以便提供更多有关它的信息)。但是它看起来像 window.ActiveXObject 对引擎来说是空的,所以它落入了“新 XMLHttpRequest()”块 - 这也失败了。

      我破解了一个解决方法,它破坏了除 IE 之外的所有浏览器 - 所以不是一个好的解决方案。我的修复更改了以下内容:

          xhr: function()
          {
              // hack to fix VS 2008 intellisense... note this breaks any browser
              // except IE
              var objXhr = { open: function() { },
                  setRequestHeader: function() { } 
              };
      
              return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : objXhr;
          },
      

      现在我的智能感知工作了。

      【讨论】:

        【解决方案4】:

        您可能希望在 Visual Studio 中禁用 JavaScript 智能感知。

        安装 SP1 后,您可以禁用 JavaScript 智能感知。
        转到工具,选项...

        将显示选项对话框。

        导航到左侧面板中的以下节点:
        文本编辑器 :: JScript :: 常规

        禁用以下选项(在语句完成组中):
        * 自动列出成员
        * 参数信息

        【讨论】:

        • 这将消除错误。但是,困扰我的不是错误。 IntelliSense 很棒,我喜欢它 - 我希望它能够工作!希望 Visual Studio 2010 的改进能够解决这个问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 1970-01-01
        • 1970-01-01
        • 2010-12-27
        • 1970-01-01
        相关资源
        最近更新 更多