2013-04-13 46 views
13

已經創建了全新的Visual Studio 2012 Ultimate SP2 MVC4項目,但無法讓CSS類選擇器智能感知工作?CSS Intellisense不適用於Visual Studio 2012中的MVC 4項目終極版

當我輸入<p class="m" ....我應該在智能感應下拉列表中出現類「myClass」,但沒有任何反應。

我有下列文件:\Views\Shared\_Layout.cshtml

什麼想法?

編輯:在全新的Windows 7系統(運行在Mac OSX平行8上)上重新安裝了VS2012,並且仍然以相同的方式運行。 MVC 3項目似乎也是如此。

enter image description here

擴展安裝: enter image description here

+0

你有沒有得到這個工作的機會?我在嘗試在MVC中使用引導時遇到了同樣的問題。 – Thunda

+0

我有同樣的問題...任何決議? – PGallagher

回答

1

嘗試添加Web要點2012擴展的Visual Studio 2012:http://visualstudiogallery.msdn.microsoft.com/07d54d12-7133-4e15-becb-6f451ea3bea6?SRC=VSIDE

和/或

嘗試加入微軟Web開發工具的擴展。

我有這兩個,並使用相同的例子intellisense像一個魅力工程。

+1

感謝您的建議,但這並沒有奏效。我已經安裝了Web Developer Tools擴展,並且剛剛安裝了Web Essentials 2012,但這沒有任何區別。添加了我在原始問題中安裝的屏幕截圖。 – cyberbobcat

+0

如果將CSS移動到專用的.css文件,智能感知是否工作? – Dubmun

0

它僅僅是失敗的CSS intellisense還是在整個Visual Studio中完全停止?

我有一個類似的問題,影響了我的整個Visual Studio 2012.這是一段時間後,但我記得從我的appdata刪除一個文件夾。看看這個鏈接,希望它會有所幫助: http://www.haneycodes.net/visual-studio-2012-intellisense-not-working-solved/

+0

這只是MVC項目的CSS智能感知。 Web窗體項目似乎工作正常。試圖刪除你建議的文件夾,但沒有喜悅。也卸載了VS2012幾次並重新安裝但仍然不能正常工作。 – cyberbobcat

1

我嘗試了所有上述補救措施和建議。這些都沒有在我的環境中工作。根據微軟(Microsoft連接的bug編號781048),他們還沒有實現MVC/Razor文件的CSS class intellisense,但正在努力將其包含在未來的版本中。

我有延長VS2012的智能感知,增加了一個解決方案,將增加智能感知到你的VS2012的環境中10分鐘的網絡直播例如:a Visual Studio Intellisense Extension

網上直播使用MEF擴展Visual Studio中添加掃描的智能感知完成源當前加載的CSS類名稱項目作爲intellisense完成集添加。這裏是CSS完成源類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel.Composition; 
using Microsoft.VisualStudio.Language.Intellisense; 
using Microsoft.VisualStudio.Text; 
using Microsoft.VisualStudio.Text.Operations; 
using Microsoft.VisualStudio.Utilities; 
using EnvDTE; 
using System.Text.RegularExpressions; 
using System.Configuration; 
using System.Collections.Specialized; 

namespace CssClassIntellisense 
{ 
    internal class cssClassList 
    { 
     public string cssFileName { get; set; } //Intellisense Statement Completion Tab Name 

     public HashSet<string> cssClasses { get; set; } 
    } 

    internal class CssClassCompletionSource : ICompletionSource 
    { 
    private CssClassCompletionSourceProvider m_sourceProvider; 
    private ITextBuffer m_textBuffer; 
    private List<Completion> m_compList; 
    private Project m_proj; 
    private string m_pattern = @"(?<=\.)[A-Za-z0-9_-]+(?=\ {|{|,|\)"; 
    private bool m_isDisposed; 

    //constructor 
    public CssClassCompletionSource(CssClassCompletionSourceProvider sourceProvider, ITextBuffer textBuffer, Project proj) 
    { 
     m_sourceProvider = sourceProvider; 
     m_textBuffer = textBuffer; 
     m_proj = proj; 
    } 

    public void AugmentCompletionSession(ICompletionSession session, IList<CompletionSet> completionSets) 
    { 

     ITextSnapshot snapshot = session.TextView.TextSnapshot; 
     SnapshotPoint currentPoint = (SnapshotPoint)session.GetTriggerPoint(snapshot); 

     if (TargetAttribute.Inside(currentPoint)) 
     { 
      var hash = new List<cssClassList>(); 
      //read any .css project file to get a distinct list of class names 
      if (m_proj != null) 
       foreach (ProjectItem _item in m_proj.ProjectItems) 
       { 
        getCssFiles(_item, hash); 
       } 

      //Scan Current Editor's text buffer for any inline css class names 
      cssClassList cssclasslist = ScanTextForCssClassName(
        "Inline", snapshot.GetText()); 

      //If file had any css class names add to hash of files with css class names 
      if (cssclasslist != null) 
       hash.Add(cssclasslist); 

      var _tokenSpanAtPosition = FindTokenSpanAtPosition(session.GetTriggerPoint(m_textBuffer), session); 

      foreach (cssClassList _cssClassList in hash) 
      { 
       m_compList = new List<Completion>(); 
       foreach (string str in _cssClassList.cssClasses.OrderBy(x => x)) //alphabetic sort 
        m_compList.Add(new Completion(str, str, str, null, null)); 

       completionSets.Add(new CompletionSet(
        _cssClassList.cssFileName, //the non-localized title of the tab 
        _cssClassList.cssFileName, //the display title of the tab 
        _tokenSpanAtPosition, 
        m_compList, 
        null)); 

      } 
     } 
    } 

    private ITrackingSpan FindTokenSpanAtPosition(ITrackingPoint point, ICompletionSession session) 
    { 
     SnapshotPoint currentPoint = (session.TextView.Caret.Position.BufferPosition) - 1; 
     ITextStructureNavigator navigator = m_sourceProvider.NavigatorService.GetTextStructureNavigator(m_textBuffer); 
     TextExtent extent = navigator.GetExtentOfWord(currentPoint); 
     return currentPoint.Snapshot.CreateTrackingSpan(extent.Span, SpanTrackingMode.EdgeInclusive); 
    } 


    private void getCssFiles(ProjectItem proj, List<cssClassList> hash) 
    { 
     foreach (ProjectItem _item in proj.ProjectItems) 
     { 
      if (_item.Name.EndsWith(".css") && 
       !_item.Name.EndsWith(".min.css")) 
      { 
       //Scan File's text contents for css class names 
       cssClassList cssclasslist = ScanTextForCssClassName(
        _item.Name.Substring(0, _item.Name.IndexOf(".")), 
        System.IO.File.ReadAllText(_item.get_FileNames(0)) 
        ); 

       //If file had any css class names add to hash of files with css class names 
       if (cssclasslist != null) 
        hash.Add(cssclasslist); 
      } 
      //recursively scan any subdirectory project files 
      if (_item.ProjectItems.Count > 0) 
       getCssFiles(_item, hash); 
     } 
    } 

    private cssClassList ScanTextForCssClassName(string FileName, string TextToScan) 
    { 

     Regex rEx = new Regex(m_pattern); 
     MatchCollection matches = rEx.Matches(TextToScan); 
     cssClassList cssclasslist = null; 

     if (matches.Count > 0) 
     { 
      //create css class file object to hold the list css class name that exists in this file 
      cssclasslist = new cssClassList(); 
      cssclasslist.cssFileName = FileName; 
      cssclasslist.cssClasses = new HashSet<string>(); 

     } 

     foreach (Match match in matches) 
     { 
      //creat a unique list of css class names 
      if (!cssclasslist.cssClasses.Contains(match.Value)) 
       cssclasslist.cssClasses.Add(match.Value); 
     } 

     return cssclasslist; 
    } 

    public void Dispose() 
    { 
     if (!m_isDisposed) 
     { 
      GC.SuppressFinalize(this); 
      m_isDisposed = true; 
     } 
    } 
} 

}

作爲一個僅供參考,您也可以使用ReSharper的解決這個問題。但是,這是需要爲Visual Studio購買的第三方產品。

+0

ReSharper非常昂貴 - 我自己使用它,但是建議一個花費數百美元的工具並不是真正解決OP問題的答案嗎?特別是因爲在這種情況下可以得到這種結果_without_ReSharper。 –

+0

瞭解成本。然而,因爲以前的答案都沒有提供一個解決方案,可以用VS2012 MVC剃鬚刀視圖提供CSS class intellisense。我相信,瞭解MS未實現此功能有助於避免認爲這是VS2012問題。而我提到的ReSharper是可行的選擇,儘管付出了代價。 –

0

對於Razor視圖,您不會爲VS2012中的CSS獲得智能感知。有一個解決方法來使用智能感知。只需使用ASPX視圖引擎創建一個測試視圖(.aspx),並在其中包含您的css文件。現在intellisense將以新的aspx視圖工作。所有你需要做的就是把aspx中的css類粘貼到Razor視圖(.cshtml或.vbhtml)中。我希望這有幫助。

相關問題