2013-04-13 43 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)中。我希望这有帮助。

相关问题