javascript - 配置 Visual Studio 2008 以编辑旧版 JScript ASP 文件

标签 javascript visual-studio-2008 asp-classic intellisense

我正在开发一个项目,该项目通过 COM 互操作将 .NET 与一些旧版 ASP 代码结合起来。旧版 ASP 是用 JScript 编写的 - 文件类似于 helloworld.asp 示例。

<%@Language="JScript"%>
<html>
<head>
  <title>Jscript ASP Page</title>
</head>
<body>
  <h1>JScript ASP</h1>
  <p>This is JScript ASP at <%=new Date()%></p>
  <%
  var helloWorld = Server.CreateObject("Interop.HelloWorld")
  helloWorld.Name = "Dylan"
  %>
  <%=helloWorld.SayHello() %>
  </body>
</html>

我真的很想使用 VS2008 来编辑遗留的 ASP 代码以及项目的其余部分,但是 Intellisense 的行为非常奇怪。一分钟后它就会给我正确的 JScript 关键字和方法:

JS Intellisense in VS2008 - working http://www.dylanbeattie.net/vs_js_working.jpg

...所以我将输入一行,按 Enter 键,开始输入下一行,完全相同的击键将为我提供看似 VBScript 智能感知的内容:

ASP intellisense in VS2008 - broken http://www.dylanbeattie.net/vs_js_wrong.jpg

有什么方法可以告诉 VS .asp 文件始终是 Javascript 代码,并且根本不使用 VB 代码?当您按 Enter 键时让 IDE 将“var”转换为“vArray”,这有点令人沮丧......

帮助我,Stackoverflow。你是我唯一的希望。

最佳答案

正如您所观察到的,经典的 ASP 智能感知在 VS2008 中被破坏了。实际上,微软在VS2008 RTM中完全削减了对Classic ASP语法着色和智能感知的支持,然后由于客户的强烈抗议而在SP1中恢复了它。看看this bug report有关如何恢复的更多信息,请访问 Microsoft Connect 网站。

无论如何,让我详细说明它是如何损坏的。您看到的实际上并不是 VB 智能感知 - 相反,您看到的是以下任意项中存在的方法和对象:

  • server-side Response object有时是其他服务器端对象,例如 Session 或 Request,就好像在您的任何代码之前有一个针对这些对象的 javascript“with”语句。这是没有意义的——这是 VS 中的一个错误。
  • client-side window object (!!!)。这是没有意义的,因为这是服务器端脚本。这是 VS 中的一个错误。
  • javascript 关键字和全局对象,例如 String。这是预期的(尽管如果您使用 runat=server 定义脚本,它的工作会更可靠 - 如果我使用 <% %> 定义脚本,我通常不会获得正确的关键字智能感知。

请注意,这些都不是 VB Intellisense——您所看到的只是经典 ASP 服务器端脚本对象模型中内置的请求、响应等对象的有效内置方法的 PascalCased 方法。

有趣的是,我发现智能感知在 runat=server 脚本 block 中比 <% %> block 中工作得更自然。至少使用 runat=server,我可以在输入“Request.”、“Response.”等时获得智能感知,而且 jscript 关键字智能感知似乎在这些 block 中也能更好地工作。

智能感知中还有其他怪癖,例如当您有 <% %> 脚本 block 时,当您键入一个字符时,该字符会在您返回的智能感知选择列表中被忽略。 (这在 runat=server block 中也效果更好)

换句话说,这一切都非常糟糕。我不知道为什么它如此失败,除了这个功能在 VS2008 中被弃用,在服务包中重新引入,并且可能比 VS 的其他部分进行的测试要少得多 - 所以它被破坏并不奇怪。尤其是当您考虑到它支持一项功能(经典 ASP)时,Microsoft 可能希望取消该功能。这并不意味着 Redmonton 人正在积极尝试破坏这一点,但在资源有限的团队中,让经典 ASP 发挥出色可能不会像 ASP.NET MVC 那样吸引同等程度的关注。

也就是说,恕我直言,即使这种有限的支持也比 VS2008 RTM 中的支持更好,当时经典的 ASP 文件看起来像记事本,根本没有智能感知或语法着色。

如果您对这种令人遗憾的情况感到恼火,我建议您在https://connect.microsoft.com/VisualStudio提交错误报告。 。就像错误报告让 Microsoft 在 VS2008 SP1 中恢复经典 ASP 智能感知一样,它也可能让他们在 SP2 和/或 VS2010 中修复它。您可能还想查看最新的 VS2010 beta,看看问题是否已解决或更严重。

很抱歉,如果这不是您希望的答案。 :-(

关于javascript - 配置 Visual Studio 2008 以编辑旧版 JScript ASP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/233845/

相关文章:

asp-classic - 将外来字符转换为正常字符

javascript - 理解随机访问数组时 Math.floor 的使用

javascript - 在 AngularJS 中显示 AJAX 加载栏

c++ - 重构我的代码。我的标题(Header Guard Issues)

c# - DataGridView ToolTipText 未显示

vbscript - 无法更改 Recordset 对象的 ActiveConnection 属性

iis - 密码保护 IIS 上的文件而不使用 NTFS 文件权限

javascript - 无法在 Vue 中渲染多个组件

javascript - 为什么在 foo :bar() function call return ReferenceError instead of SyntaxError? 中使用冒号

visual-studio-2008 - VS2008 和 WinCe 6.0