チュートリアル: コンテンツ タイプとファイル名拡張子とをリンクさせる

エディター Managed Extensibility Framework (MEF) 拡張機能を使用して、独自のコンテンツ タイプを定義し、ファイル名拡張子をリンクさせることができます。 場合によっては、ファイル名拡張子が言語サービスによって既に定義されていることがあります。 ただし、これを MEF で使用するには、コンテンツ タイプにリンクさせる必要があります。

MEF プロジェクトを作成する

  1. C# VSIX プロジェクトを作成します。 ([新しいプロジェクト] ダイアログで、[Visual C#]、[拡張機能][VSIX プロジェクト] の順に選択します。) ソリューションに ContentTypeTest という名前を付けます。

  2. Source.extension.vsixmanifest ファイルで、[資産] タブにアクセスし、[種類] フィールドを [Microsoft.VisualStudio.MefComponent] に、[ソース] フィールドを [現在のソリューション内のプロジェクト] に、[プロジェクト] フィールドをプロジェクトの名前に設定します。

コンテンツ タイプを定義する

  1. クラス ファイルを追加し、その名前を FileAndContentTypesにします。

  2. 次のアセンブリへの参照を追加します。

    1. System.ComponentModel.Composition

    2. Microsoft.VisualStudio.Text.Logic

    3. Microsoft.VisualStudio.CoreUtility

  3. 次の using ディレクティブを追加します。

    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text.Classification;
    using Microsoft.VisualStudio.Utilities;
    
    
  4. 定義を含む静的クラスを宣言します。

    internal static class FileAndContentTypeDefinitions
    {. . .}
    
  5. このクラスでは、"hid" という名前の ContentTypeDefinition をエクスポートし、その基本定義を "text" として宣言します。

    internal static class FileAndContentTypeDefinitions
    {
        [Export]
        [Name("hid")]
        [BaseDefinition("text")]
        internal static ContentTypeDefinition hidingContentTypeDefinition;
    }
    
  • このコンテンツ タイプをファイル名拡張子にマップするには、拡張子が hid でコンテンツ タイプが "hid" の FileExtensionToContentTypeDefinition をエクスポートします。

    internal static class FileAndContentTypeDefinitions
    {
         [Export]
         [Name("hid")]
         [BaseDefinition("text")]
        internal static ContentTypeDefinition hidingContentTypeDefinition;
    
         [Export]
         [FileExtension(".hid")]
         [ContentType("hid")]
        internal static FileExtensionToContentTypeDefinition hiddenFileExtensionDefinition;
    }
    

コンテンツ タイプをエディター エクスポートに追加する

  1. エディター拡張機能を作成します。 たとえば、「チュートリアル: 余白のグリフの作成」で説明されている余白のグリフ拡張機能を使用できます。

  2. この手順で定義したクラスを追加します。

  3. 拡張クラスをエクスポートするときに、タイプが "hid" の ContentTypeAttribute をそれに追加します。

    [Export]
    [ContentType("hid")]