2008-10-24 47 views
2

我正在開發一個項目,該項目通過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。你是我唯一的希望。

回答

4

正如你所看到的,經典的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測試版以查看問題是否得到解決或更糟。

對不起,如果這不是你希望的答案。 :-(

相關問題