Walkthrough: Link a content type to a file name extension
You can define your own content type and link a file name extension to it by using the editor Managed Extensibility Framework (MEF) extensions. In some cases, the file name extension is already defined by a language service. But, to use it with MEF, you must still link it to a content type.
Create a MEF project
Create a C# VSIX project. (In the New Project dialog, select Visual C# / Extensibility, then VSIX Project.) Name the solution
ContentTypeTest
.In the source.extension.vsixmanifest file, go to the Assets tab, and set the Type field to Microsoft.VisualStudio.MefComponent, the Source field to A project in current solution, and the Project field to the name of the project.
Define the content type
Add a class file and name it
FileAndContentTypes
.Add references to the following assemblies:
System.ComponentModel.Composition
Microsoft.VisualStudio.Text.Logic
Microsoft.VisualStudio.CoreUtility
Add the following
using
directives.using System.ComponentModel.Composition; using Microsoft.VisualStudio.Text.Classification; using Microsoft.VisualStudio.Utilities;
Declare a static class that contains the definitions.
internal static class FileAndContentTypeDefinitions {. . .}
In this class, export a ContentTypeDefinition named "hid" and declare its base definition to be "text".
internal static class FileAndContentTypeDefinitions { [Export] [Name("hid")] [BaseDefinition("text")] internal static ContentTypeDefinition hidingContentTypeDefinition; }
Link a file name extension to a content type
To map this content type to a file name extension, export a FileExtensionToContentTypeDefinition that has the extension .hid and the content type "hid".
internal static class FileAndContentTypeDefinitions { [Export] [Name("hid")] [BaseDefinition("text")] internal static ContentTypeDefinition hidingContentTypeDefinition; [Export] [FileExtension(".hid")] [ContentType("hid")] internal static FileExtensionToContentTypeDefinition hiddenFileExtensionDefinition; }
Add the content type to an editor export
Create an editor extension. For example, you can use the margin glyph extension described in Walkthrough: Create a margin glyph.
Add the class you defined in this procedure.
When you export the extension class, add a ContentTypeAttribute of type "hid" to it.
[Export] [ContentType("hid")]