1

Visual Studio 2010 で Managed Extensibility Framework (MEF) を使用して、Visual Studio 自体を強化しています。具体的には、特定の状況でエラーを生成して、開発者がコードに問題があることを認識できるようにしています。ErrorTag を使用して赤い波線を表示することはできますが、エラー リストにエラーが表示されません。

カスタム エラーが存在する場合でも、アプリケーションは実行されることに気付きました。したがって、カスタム エラーは実際には、開発者がそれらを無視して楽しい道を進むことを妨げるものではありません。本質的に、私が知る限り、ErrorTag が実際に行っていることは、赤い波線を作成することだけです。

MEF を使用してエラー リストにエラーを追加し、カスタム エラーが存在する場合にアプリケーションが実行されないようにする方法を知っている人はいますか? エラーをまっすぐに見つめる以外に開発者に実際に強調表示されていない場合、エラーを作成する目的が無効になります。以下はコードスニペットです。これらは、例をシンプルかつクリーンに保つために、エラーとしてタグ付けする単純なテキストを探しているだけです。

また、ビジュアル スタジオの拡張に関する良いビデオや書籍はありますか? 私が見つけた最高のものは Pluralsight にありますが、まだ表面をなぞっただけです。

[Export(typeof(ITaggerProvider))]
[ContentType("code")]
[TagType(typeof(ErrorTag))]
class CheckTextErrorProvider : ITaggerProvider
{
    public ITagger<T> CreateTagger<T>(Microsoft.VisualStudio.Text.ITextBuffer buffer) where T : ITag
    {
        if (buffer == null)
        {
            throw new ArgumentException("Buffer is null");

        }
        else
        {
            return new CheckTextErrorTagger() as ITagger<T>;
        }
    }
}


class CheckTextErrorTagger: ITagger<IErrorTag>
{
    private const string _searchText = "checktext";
    public IEnumerable<ITagSpan<IErrorTag>> GetTags(NormalizedSnapshotSpanCollection spans)
    {
        foreach (SnapshotSpan currSpan in spans)
        {
            int loc = currSpan.GetText().ToLower().IndexOf(_searchText);

            if (loc > -1)
            {
                SnapshotSpan CheckTextSpan = new SnapshotSpan(currSpan.Snapshot, new Span(currSpan.Start + loc, _searchText.Length));
                yield return new TagSpan<ErrorTag>(CheckTextSpan, new ErrorTag());
            }
        }
    }

    public event EventHandler<SnapshotSpanEventArgs> TagsChanged
    {
        add { }
        remove { }
    }
}
4

1 に答える 1

0

ErrorListProvider を作成する必要があります。

 class ErrorListHelper
{
    public static ErrorListProvider GetErrorListProvider()
    {


        Microsoft.VisualStudio.OLE.Interop.IServiceProvider globalService = (Microsoft.VisualStudio.OLE.Interop.IServiceProvider)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(Microsoft.VisualStudio.OLE.Interop.IServiceProvider));

        System.IServiceProvider serviceProvider = new ServiceProvider(globalService);

        ErrorListProvider mErrorListProvider = new ErrorListProvider(serviceProvider);
        mErrorListProvider.ProviderName = "JS Errors";
        mErrorListProvider.ProviderGuid = new Guid(EnvDTE.Constants.vsViewKindCode);
        return mErrorListProvider;
    }
}

これを使って:

mErrorListProvider = ErrorListHelper.GetErrorListProvider();

エラーを追加します。

ErrorTask errorTask = new ErrorTask();

            errorTask.Line = err.LineIndex;
            errorTask.Column = err.ColumnIndex;
            errorTask.Text = err.Text;
            errorTask.ErrorCategory = TaskErrorCategory.Warning;
            errorTask.Document = mFilePath;

            errorTask.Navigate += errorTask_Navigate;

            mErrorListProvider.Tasks.Add(errorTask);
于 2013-10-29T17:17:37.433 に答える