ProvideLanguageServiceAttribute Class

Informs Visual Studio that a VSPackage provides a language service. Used with the managed package framework (MPF).

Namespace:  Microsoft.VisualStudio.Shell
Assembly:  Microsoft.VisualStudio.Shell.9.0 (in Microsoft.VisualStudio.Shell.9.0.dll)


<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple := True, Inherited := True)> _
Public NotInheritable Class ProvideLanguageServiceAttribute _
    Inherits RegistrationAttribute
Dim instance As ProvideLanguageServiceAttribute
[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class ProvideLanguageServiceAttribute : RegistrationAttribute
[AttributeUsageAttribute(AttributeTargets::Class, AllowMultiple = true, Inherited = true)]
public ref class ProvideLanguageServiceAttribute sealed : public RegistrationAttribute
public final class ProvideLanguageServiceAttribute extends RegistrationAttribute


This user-defined attribute (which is specific to Visual C++) is used to provide information necessary to register a language service with Visual Studio. The values specified by this attribute are stored as metadata in the assembly. This metadata is later used by a program such as regpkg.exe program (part of the VSIP SDK) to create the corresponding registry keys and entries that tell Visual Studio about the language service.

The registry entries affected by the ProvideLanguageServiceAttribute are found under the following registry key:

            Language Services\
              [language name]\
                (Default) = reg_sz: [Language Service GUID]
                Package   = reg_sz: [Package GUID]
                LangResID = reg_dword: [language name resource ID]

Where [X.Y] is the version of Visual Studio, for example, 8.0Exp, and [language name] is the name of the language (as specified in the second parameter to the ProvideLanguageServiceAttribute class constructor).


Each property specifies the exact registry entry it affects so those entries are not shown in the above example. Those additional entries appear at the same level as the three entries shown.

The class constructor specifies the minimum required parameters. A user-defined attribute class also supports optional named parameters. These named parameters are specified in the constructor's parameter list after the required parameters. All of the properties on this class that support both get and set operators can be specified as a named parameter. The Example shows how named parameters are used.


Some of the named parameters are specific to the managed package framework (MPF) and these are noted in each property description.

The following user-defined attributes are used for language services:




Registers the language service with Visual Studio and specifies what features are supported.


Associates a file extension with the language service.


Specifies a property node or page for the Options dialog box specific to the language service.


Specifies location information to support code snippets in the language service.


Registers a language service as a Visual Studio service. All services supplied in managed code use this attribute.

Notes to Implementers:

This attribute class cannot be inherited from so there is nothing to implement.

Notes to Callers:

This attribute class is typically applied to your primary VSPackage class, although it can appear on any class. This class should appear only once for each language service your VSPackage supports.


This example shows how this user-defined attribute is used to register a language service that supports IntelliSense operations, brace matching, asynchronous (background) parsing, and custom colorable items.


Visual C# allows for a shorthand form of a user-defined attribute by dropping the "Attribute" part of the name. This shorthand form is used in this and all other examples throughout this class.

using Microsoft.VisualStudio.Shell;

namespace MyLanguagePackage
    internal class MyConstants
        public const string languageName           = "MyLanguage";
        public const int    languageNameResourceID = 106;

        // Optional language service properties
        CodeSense             = true,  // General IntelliSense support
        RequestStockColors    = false, // Custom colorable items
        EnableASyncCompletion = true,  // supports background parsing
        MatchBraces           = true,  // Match braces on command
        MatchBracesAtCaret    = true   // Match braces while typing

    class MyLanguagePackage

Inheritance Hierarchy


Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also


ProvideLanguageServiceAttribute Members

Microsoft.VisualStudio.Shell Namespace