Visual studio VS单文件生成器:如何添加注册表信息?在VS启动时运行代码?

Visual studio VS单文件生成器:如何添加注册表信息?在VS启动时运行代码?,visual-studio,vs-extensibility,Visual Studio,Vs Extensibility,我正试图找出如何在VS2010上安装一个文件生成器。之前,我在VS2013上工作了好几个小时后才得到它;在这两种情况下,主要的困难是设置。VSIX文件: 您可以使用VSIX格式打包项目和项目模板, Visual Studio集成包、托管扩展性框架 (MEF)组件、工具箱控件、程序集和自定义类型。这个 VSIX格式使用严格基于文件的部署,不支持 写入全局程序集缓存(GAC)或系统注册表。 VSIX是以下扩展类型的首选部署方法: 它支持 我的VS2013解决方案涉及程序集上的CodeGenerato

我正试图找出如何在VS2010上安装一个文件生成器。之前,我在VS2013上工作了好几个小时后才得到它;在这两种情况下,主要的困难是设置。VSIX文件:

您可以使用VSIX格式打包项目和项目模板, Visual Studio集成包、托管扩展性框架 (MEF)组件、工具箱控件、程序集和自定义类型。这个 VSIX格式使用严格基于文件的部署,不支持 写入全局程序集缓存(GAC)或系统注册表。 VSIX是以下扩展类型的首选部署方法: 它支持

我的VS2013解决方案涉及程序集上的
CodeGeneratorRegistrationAttribute
ComVisible(true)
,但安装后,在用户以管理员模式运行
devenv.exe/setup
之前,扩展无法工作。在VS2010中,任何SDK DLL中都不存在CodeGeneratorRegistrationAttribute,简单地将CodeGeneratorRegistrationAttribute.cs的源代码添加到项目中(正如所做的那样)似乎不起作用(我不明白为什么示例似乎希望它能工作;.NET毕竟没有使用,那么这个属性怎么可能有任何效果?)

如果VSIX不能直接添加注册表设置,我认为一个合理的替代方法是包含一些在VS启动时自动运行的代码。这些代码可以找到正在运行的VS版本的注册表配置单元的路径,并在那时添加必要的注册表设置。因此,我有三个问题:

  • 当VS启动时,如何使我在扩展内部编写的方法运行
  • 如何获取当前VS注册表配置单元的路径
  • 是否有其他方法添加注册表信息

  • MSI部署有什么问题?您可以从那里做任何事情。WiX可以选择非常简单地安装VSIX包,只需使用嵌入元素
    。它还提供创建新注册表项+免费获得注册表项unistall。请注意,如果需要,您可以提升权限。

    您的VSIX是否有一个可以克斯特恩斯

    在包初始化时运行的包的
    Initialize
    方法中添加代码


    要了解基于VS的注册表内容,请参见

    最终我放弃了制作VSIX来容纳我的单个文件生成器


    但是,当我还在尝试创建VSIX文件时,它就派上了用场。

    虽然我不想这样做,但如果我这样做了,我仍然必须能够找出VS注册表配置单元的位置。似乎有几个可能的位置,我还没有看到完整的列表。
    ?哪个名称空间?无论如何,你可以有代表,我没有时间授予它。如果您使用“新建项目向导”创建包含命令的VSIX包,它将为您生成一个扩展visual studio的
    类型的新类型。请参阅,这很不幸。我创建了一个“visual studio包”使用菜单命令进行项目,并且除非/直到用户实际调用菜单选项,否则不会初始化包类。可行!如果希望一直加载,可以添加
    [ProvideAutoLoad(Microsoft.VisualStudio.Shell.Interop.UIContextGuids80.NoSolution)]
    到您的包属性。如果您希望在用户加载解决方案时自动加载,则存在类似的guid
    解决方案。但请记住,这并不意味着您的内容一直都在加载,因此请保持简短和快速!包+[ProvideAutoLoad]这项技术在VS2010中对我有效,但在VS2012、VS2010 Express和VS2013 Express中出现了故障(如下所述),所以我放弃了制作vsix,选择了完全不同的产品。