CSS Intellisense не работает для проекта MVC 4 в Visual Studio 2012 Ultimate
Создали новый проект Visual Studio 2012 Ultimate SP2 MVC4, но не смогли заставить работать CSS-селектор классов intellisense?
Когда я печатаю <p class="m"
.... Я должен получить класс "myClass" в выпадающем списке intellisense, но ничего не происходит.
Файл, который я перечислил ниже: \Views\Shared\_Layout.cshtml
Есть идеи?
Изменить: Переустановить VS2012 на новой системе Windows 7 (работает на Mac OSX Parallels 8) и продолжает действовать таким же образом. Также похоже на то же самое для проектов MVC 3.
Установленные расширения:
4 ответа
Я перепробовал все вышеперечисленные средства и предложения. Ни один из них не работал в моей среде. Согласно Microsoft (под идентификатором ошибки Microsoft Connect 781048), они не реализовали intellisense класса CSS для файлов MVC/Razor, но работают над включением этого в будущий выпуск.
У меня есть 10-минутный пример веб-трансляции по расширению intellisense VS2012, который добавляет одно решение, которое добавит intellisense в вашу среду VS2012: расширение Visual Studio Intellisense
Веб-трансляция использует MEF для расширения Visual Studio для добавления источника завершения intellisense, который сканирует загруженный в данный момент проект на предмет имен классов 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;
}
}
}
}
Как FYI, вы также можете решить эту проблему с помощью Resharper. Но это сторонний продукт, который необходимо приобрести для Visual Studio
Попробуйте добавить расширение Web Essentials 2012 для Visual Studio 2012: http://visualstudiogallery.msdn.microsoft.com/07d54d12-7133-4e15-becb-6f451ea3bea6?SRC=VSIDE
И / или
Попробуйте добавить расширение Microsoft Web Developer Tools.
У меня есть и то и другое, и, используя ваш пример, intellisense работает как шарм.
Это просто CSS intellisense, который потерпел неудачу или он полностью остановился во всей Visual Studio?
У меня была похожая проблема, которая затрагивала всю мою Visual Studio 2012. Это было некоторое время назад, но я помню, как удалял папку из моих appdata. Посмотрите на эту ссылку, надеюсь, это поможет: http://www.haneycodes.net/visual-studio-2012-intellisense-not-working-solved/
Вы не собираетесь получать intellisense для CSS в VS2012 для видов Razor. Существует обходной путь для использования intellisense. Просто создайте одно тестовое представление (.aspx) с использованием механизма просмотра ASPX и добавьте туда свой файл css. Теперь intellisense будет работать в новом представлении aspx. Все, что вам нужно сделать, это скопировать и вставить класс css из aspx в представление Razor (.cshtml или.vbhtml). Надеюсь, это поможет.