13

まったく新しい Visual Studio 2012 Ultimate SP2 MVC4 プロジェクトを作成しましたが、CSS クラス セレクターの IntelliSense を機能させることができませんか?

入力すると<p class="m".... クラス「myClass」がインテリセンス ドロップダウンに表示されるはずですが、何も起こりません。

以下にリストしたファイルは次のとおりです。\Views\Shared\_Layout.cshtml

何か案は ?

編集: 新しいWindows 7システム(Mac OSXパラレル8で実行)にVS2012を再インストールしても、同じように動作します。MVC 3 プロジェクトでも同じようです。

ここに画像の説明を入力

インストールされている拡張機能: ここに画像の説明を入力

4

4 に答える 4

1

Visual Studio 2012 用の Web Essentials 2012 拡張機能を追加してみてください: http://visualstudiogallery.msdn.microsoft.com/07d54d12-7133-4e15-becb-6f451ea3bea6?SRC=VSIDE

および/または

Microsoft Web Developer Tools 拡張機能を追加してみてください。

私はこれらの両方を持っており、同じ例を使用すると、インテリセンスは魅力的に機能します。

于 2013-05-03T22:04:14.123 に答える
1

上記のすべての救済策と提案を試しました。私の環境ではこれらのどれも機能しませんでした。Microsoft によると (Microsoft connect のバグ ID 781048 の下)、彼らは MVC/Razor ファイルの CSS クラス IntelliSense を実装していませんが、将来のリリースにこれを含めるように取り組んでいます。

VS2012 環境に IntelliSense を追加する 1 つのソリューションを追加する VS2012 Intellisense を拡張する 10 分間の Web キャストの例があります: Visual Studio Intellisense Extension

この Web キャストでは、MEF を使用して Visual Studio を拡張し、現在読み込まれているプロジェクトをスキャンして CSS クラス名をインテリセンス補完セットとして追加するインテリセンス補完ソースを追加します。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 用に購入する必要があるサード パーティ製品です。

于 2013-07-05T05:42:28.210 に答える
0

Razor ビューの VS2012 で CSS のインテリセンスを取得することはありません。IntelliSense を使用する回避策があります。ASPX ビュー エンジンを使用して 1 つのテスト ビュー (.aspx) を作成し、そこに css ファイルを含めるだけです。Intellisense が新しい aspx ビューで動作するようになりました。CSS クラスを aspx から Razor ビュー (.cshtml または .vbhtml) にコピーして貼り付けるだけです。これが役立つことを願っています。

于 2016-01-11T14:43:25.903 に答える
0

失敗したのは CSS インテリセンスだけですか、それとも Visual Studio 全体で完全に停止しましたか?

Visual Studio 2012 全体に影響する同様の問題がありました。しばらく前のことですが、appdata からフォルダーを削除したことを覚えています。このリンクを見てください。うまくいけば、http: //www.haneycodes.net/visual-studio-2012-intellisense-not-working-solved/

于 2013-05-10T09:28:57.137 に答える