2

我正在开发一个通过 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 关键字和方法:

VS2008 中的 JS Intellisense - 工作 http://www.dylanbeattie.net/vs_js_working.jpg

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

VS2008 中的 ASP 智能感知 - 损坏 http://www.dylanbeattie.net/vs_js_wrong.jpg

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

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

4

1 回答 1

4

正如您所观察到的,经典的 ASP 智能感知在 VS2008 中被破坏。微软实际上在 VS2008 RTM 中完全切断了对 Classic ASP 语法着色和智能感知的支持,然后由于客户的强烈抗议,在 SP1 中恢复了它。查看Microsoft Connect 站点上的此错误报告,了解有关它如何恢复的更多信息。

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

  • 服务器端 Response 对象有时是其他服务器端对象,如 Session 或 Request,就好像在您的任何代码之前对这些对象有一个 javascript "with" 语句。这毫无意义——这是 VS 中的一个错误。
  • 客户端窗口对象(!!!!)。这是没有意义的,因为这是服务器端脚本。这是VS中的一个错误。
  • javascript 关键字和全局对象,如字符串。这是意料之中的(尽管如果您使用 runat=server 定义脚本,它会更可靠地工作——如果我使用 <% %> 定义脚本,我通常不会得到正确的关键字智能感知。

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

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

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

换句话说,这一切都非常破碎。我没有关于它为什么如此失败的内部信息,除了这是一个在 VS2008 中被弃用的功能,在服务包中被带回,并且可能比 VS 的其他部分进行的测试要少得多——所以它被破坏并不奇怪。尤其是当您考虑到它支持一项功能时,即经典的 ASP,Microsoft 可能希望放弃该功能。这并不意味着 Redmontonians 正在积极尝试破坏这一点,但在资源有限的团队中,让经典 ASP 工作得很好可能不会像 ASP.NET MVC 那样吸引同等程度的关注。

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

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

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

于 2009-10-29T21:23:59.947 回答