配置Visual Studio 2008以编辑旧版JScript ASP文件
我正在开发一个项目,该项目通过COM interop将.NET与一些旧版ASP代码结合在一起。传统的ASP是用JScript编写的 - 文件看起来像这个helloworld.asp例子。配置Visual Studio 2008以编辑旧版JScript 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代码,但智能感知表现非常奇怪。一分钟它会被给我正确的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代码?当你按下回车键时,IDE将“var”变成“vArray”,这证明有点令人沮丧...
帮我,Stackoverflow。你是我唯一的希望。
正如你所看到的,经典的ASP intellisense在VS2008中被打破了。微软实际上完全减少了对VS2008 RTM中经典ASP语法着色和智能感知的支持,然后由于客户的反对而在SP1中将其恢复。请查看Microsoft Connect网站上的this bug report以获取有关如何恢复的更多信息。
无论如何,让我详细说明它是如何被破坏的。你看到的其实不是VB intellisense--相反,你看到的方法和它存在于以下任何对象:
- 的server-side Response object有时其他服务器端如会话或请求对象,如果在任何代码之前有这些对象的javascript“with”语句。这没有任何意义 - 这是VS中的一个错误。
- the client-side window object(!!!!)。这是没有意义的,因为这是服务器端脚本。这是VS中的一个错误。
- javascript关键字和像String这样的全局对象。这是预期(但如果你定义使用RUNAT =服务器脚本,它的工作原理更reliably--如果我定义的脚本<%%>我经常没有得到适当的关键词智能提示。
注意,无这些都是VB Intellisense--你看到的只是PascalCased方法的经典ASP的服务器端脚本对象模型中内置的Request,Response等对象的有效内置方法
有趣的是,我发现intellisense在runat = server脚本块中的工作要比<%\ >块更自然。至少在runat = server的情况下,我输入“Request”,“Response”等来获得智能感知。而且jscript关键词intellisense在这些模块中似乎也能更好地工作。
intellisense中还有其他的怪癖,比如当你有一个脚本块时,当你键入一个字符时,该字符在你回来的智能感知选择列表中被忽略。 (这在runat =服务器块中也可以更好地工作)
换句话说,这是非常糟糕的。我没有内部消息说明它为什么如此糟糕,除了这是一个在VS2008中弃用的功能,它被带回到一个服务包中,并且可能比VS的其他部分测试的少得多 - 所以它不会被打破。特别是当你认为它支持一个功能,传统的ASP,微软可能想要消失。这并不意味着Redmontonians正在积极试图破坏这一点,但是在一个资源有限的团队中,让经典的ASP工作得很好可能不会像ASP.NET MVC那样引起同样的关注。
也就是说,恕我直言,即使这种有限的支持比在VS2008 RTM中有什么更好,当传统的ASP文件看起来像记事本,而没有任何intellisense或语法着色。
如果您对这种不幸的事态感到恼火,我会建议在https://connect.microsoft.com/VisualStudio处提交一份错误报告。就像一个错误报告让微软在VS2008 SP1中恢复传统的ASP intellisense,它可能让他们修复SP2和/或VS2010。您可能还想查看最新的VS2010测试版以查看问题是否得到解决或更糟。
对不起,如果这不是你希望的答案。 :-(