在您的示例代码中,您使用ProvideLanguageExtensionAttribute 将某个文件扩展名链接到您的语言服务。 ProvideLanguageExtensionAttribute 类继承 RegistrationAttribute 类,可用于在安装过程中注册包信息(适用于 Visual Studio 2010 及任何更新版本)。我想,Visual Studio 不会在任何时候加载语言服务扩展时反映该属性,而是从注册表中读取信息......
另一个使用RegistrationAttribute 的好例子是ProvideFileFilterAttribute,它可以在codeplex 上发布的Visual Studio 的Python 工具 项目中找到。它用于扩展 Visual Studio 的打开文件对话框的文件过滤器列表,它可以让您了解注册属性的实现如何......我想说您可以轻松地想出一个可以添加或删除 IDE 在下次启动时获取的文件扩展名的服务...
我还在开发一个自定义语言服务扩展,它同时注册文件扩展名和 -filters;所以我只是检查了注册表以找到我通过属性提供的信息;这些是我的发现...
出现在打开文件对话框的过滤器列表中的文件扩展名存储在以下键...
HKCU\Software\Microsoft\VisualStudio\
{version}_Config\Languages\File Extensions\{extension}
其中键的默认值包含语言服务的GUID...
Default => {xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx}
另外,还有一个键,但我不确定值是否是从属性中获取的……
HKCU\Software\Microsoft\VisualStudio\
{version}_Config\Diff\SupportedContentTypes
与项目工厂和编辑器扩展关联的文件扩展名存储在以下键下...
HKCU\Software\Microsoft\VisualStudio\
{version}_Config\Projects\{project-factory}\FileExtensions\{extension}
其中key包含项目工厂的GUID。键包含指向编辑器工厂的单个值...
EditorFactoryNotify => {xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx}
在我的语言服务中,我还覆盖了 LanguageService 实现的 GetFileExtensions- 和 GetFormatFilterList 方法...